Mon*_*cat 6 python django signatures celery
我已经开始在Django Python项目中使用Celery 4.1,并且遇到了Signatures。
在文档中说:
您刚刚在调用指南中学习了如何使用任务延迟方法来调用任务,这通常是您所需要的,但是有时您可能希望将任务调用的签名传递给另一个进程或作为另一个函数的参数。
signature()包装单个任务调用的参数,关键字参数和执行选项,以便可以将其传递给函数,甚至进行序列化并通过网络发送。
尽管我在某些示例中看到了它们的用法,但我真的不知道何时,为什么使用它们以及它们解决了哪些问题。有人可以向外行解释吗?
小智 6
您可以将 Celery 中的签名视为运行任务的占位符。例如,假设您希望构建一个由和弦、组和链组成的复杂工作流程,并在不同的代码段中使用它。在这种情况下,定义各种任务签名并根据需要将它们放置在您的工作流程中会更容易:
def create_workflow():
return chord([sig_1, sig_2, chain([sig_3, sig_4])],
body=group([sig_5, sig_6]).set(queue=PRIORITY_QUEUE))
Run Code Online (Sandbox Code Playgroud)
本示例中的每个签名都已预先定义,如果这些签名很复杂,这可能会产生很大的不同。然后你可以在需要的时候打电话create_workflow()申请delay()
小智 6
签名与链一起使用以创建工作流。“ .s”是“ .signature”的缩写。当使用“ .s”时,意味着前端任务的结果或返回值将传递给下一个任务。“签名”的对立面是“不变签名”,其中每个任务都是独立的。例如(签名):
res = chain(add.s(2,2), add.s(4), add.s(8))
res().get()
>> 16
Run Code Online (Sandbox Code Playgroud)
示例(不可变签名):
res = chain(add.si(2,2)|add.si(4,4)|add.si(8,8))()
res.get()
>>16
res.parent.get()
>>8
res.parent.parent.get()
>>4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2979 次 |
| 最近记录: |