【问题标题】:With Celery Canvas, what is the difference between chord() and chain(group(), task)使用 Celery Canvas,chord() 和 chain(group(), task) 有什么区别
【发布时间】:2015-07-02 08:27:43
【问题描述】:

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

看来我们可以使用和弦,或者组和链:

chord(tasks, task)

group(tasks) | task

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

【问题讨论】:

    标签: python celery celery-canvas


    【解决方案1】:

    Canvas docs 说:

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

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

    【讨论】:

    • 不知道为什么这被赞成或接受。它没有回答这个问题。仍然不清楚这里有什么区别。
    【解决方案2】:

    来自 Canvas 文档:

    • 群组

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

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

    • 和弦

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

    【讨论】:

      猜你喜欢
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 2021-07-30
      • 1970-01-01
      • 2016-03-02
      • 2011-06-27
      相关资源
      最近更新 更多