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



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

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

chord(tasks, task)

group(tasks) | task

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

Canvas文档说:

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

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

来自Canvas文档:

组基元是一个签名,它接受应该并行应用的任务列表。

chain原语使我们能够将签名链接在一起,以便一个签名在另一个签名之后被调用,本质上形成一个回调链。

  • 和弦

和弦就像一个组,但有一个回调。和弦由一个标头组和一个正文组成,其中正文是一个应在标头中的所有任务完成后执行的任务。

最新更新