Celery(三):Canvas工作流

726 阅读1分钟

签名

有时候你可能想将一个任务调用的签名传递给另外一个进程或者作为另外一个函数的参数。
任务签名包含了一次任务调用的参数、关键字参数以及执行选项信息,它可以传递给其他函数,甚至序列化后通过网络传输。

你使用 add 任务的名称创建一个签名,就像这样:

>>> from celery import signature
>>> signature('tasks.add', args=(2, 2), countdown=10)
tasks.add(2, 2)

signature可以简写成s()或者si()
s():接受参数
si():不接受参数

group

组元语是一个签名,参数是要并发执行的任务的列表
>>> from celery import group 
>>> res = group(add.s(i, i) for i in xrange(10))() 
>>> res.get(timeout=1) 
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

chain

链元语让我们可以将签名链接起来,使得一个任务调用后执行另外一个任务,本质上形成一个回调链。
方式一:
>>> from celery import chain 
>>> # 2 + 2 + 4 + 8 
>>> res = chain(add.s(2, 2), add.s(4), add.s(8))() 
>>> res.get() 
16

- 方式2
>>> chain = add.s(2, 2) | add.s(4) | add.s(8)
>>> chain().get()
16

chord

弦就像带有一个回调函数的组。弦由一个头部组和弦体组成,而弦体是头部组中所有任务都完成之后应该执行的任务。
>>> from celery import chord 
>>> # 2 + 2 + 4 + 8 
>>> res = chord([add.s(2, 2), add.s(4)], add.s(8))() 
>>> res.get() 
16

group/chain/chord 可以相互嵌套