使用 Celery Canvas,chord() 和 chain(group(), task) 有什么区别
With Celery Canvas, what is the difference between chord() and chain(group(), task)
我们正在使用 Celery 实施工作流程。首先,我们需要 运行 一些并行任务,当它们全部完成后,我们需要 运行 一个任务。
看来我们可以使用和弦,或者组和链:
chord(tasks, task)
对
group(tasks) | task
这两者之间的确切区别是什么?他们似乎在做同样的事情。
Canvas docs 说:
Chaining a group together with another task will automatically upgrade it to be a chord:
>>> c3 = (group(add.s(i, i) for i in xrange(10)) | xsum.s())
>>> res = c3()
>>> res.get()
90
来自 Canvas 文档:
- 组
组原语是一个签名,它采用应并行应用的任务列表。
- 连锁
链原语让我们 link 将签名放在一起,以便一个接一个地调用,实质上形成了一个回调链。
- 和弦
和弦就像一个组,但有一个回调。和弦由header组和body组成,其中body是在header中的所有任务完成后应执行的任务。
我们正在使用 Celery 实施工作流程。首先,我们需要 运行 一些并行任务,当它们全部完成后,我们需要 运行 一个任务。
看来我们可以使用和弦,或者组和链:
chord(tasks, task)
对
group(tasks) | task
这两者之间的确切区别是什么?他们似乎在做同样的事情。
Canvas docs 说:
Chaining a group together with another task will automatically upgrade it to be a chord:
>>> c3 = (group(add.s(i, i) for i in xrange(10)) | xsum.s()) >>> res = c3() >>> res.get() 90
来自 Canvas 文档:
- 组
组原语是一个签名,它采用应并行应用的任务列表。
- 连锁
链原语让我们 link 将签名放在一起,以便一个接一个地调用,实质上形成了一个回调链。
- 和弦
和弦就像一个组,但有一个回调。和弦由header组和body组成,其中body是在header中的所有任务完成后应执行的任务。