使用Celery Canvas,chord()和chain(group(),task)之间有什么区别

时间:2015-07-02 08:27:43

标签: python celery celery-canvas

我们正在使用Celery实施工作流程。首先,我们需要并行运行一些任务,当它们全部完成时,我们需要运行一个任务。

似乎我们可以使用和弦,或组和链:

chord(tasks, task)

VS

group(tasks) | task

这两者之间的确切区别是什么?他们似乎做同样的事情。

2 个答案:

答案 0 :(得分:3)

Canvas docs说:

  

将一个组与另一个任务链接在一起会自动将其升级为和弦:

 >>> c3 = (group(add.s(i, i) for i in xrange(10)) | xsum.s())
>>> res = c3()
>>> res.get()
90

答案 1 :(得分:0)

来自 Canvas 文档:

  • 群组

组原语是一个签名,它采用应并行应用的任务列表。

链原语让我们将签名链接在一起,以便一个接一个地调用,本质上形成了一个回调链。

  • 和弦

和弦就像一个组,但带有回调。一个chord由header group和body组成,其中body是指在header中的所有任务完成后应该执行的任务。