如何使用芹菜有条件地完成任务?

时间:2014-06-24 11:47:08

标签: python celery

我有一个像这样的芹菜任务队列:

from __future__ import absolute_import

from proj.celery import app


@app.task
def add(x, y):
    return x + y


@app.task
def mul(x, y):
    return x * y


@app.task
def xsum(numbers):
    return sum(numbers)

现在我想调用第3个任务xsum当且仅当其他两个任务addmul都正确成功时。我怎么能用芹菜做这个?

2 个答案:

答案 0 :(得分:3)

您应该使用某些画布,例如chainchord (read the docs)。基本上,chain按顺序执行其所有任务,chord由一个标题(=一组任务)和一个回调(=最终任务)组成,一旦该组执行已完成。例如,您可以执行以下操作:

callback = xsum.s()
header = [add.s(1, 1), mul.s(2, 2)]
result = chord(header)(callback)
result.get()

关于如何处理错误,我只引用文档:

  

从3.1错误将传播到回调,因此回调将   不执行而是回调更改为失败状态,并且   错误设置为ChordError异常:

     

如果您运行3.0.14或更高版本,则可以通过启用新行为   CELERY_CHORD_PROPAGATES设置:

     

CELERY_CHORD_PROPAGATES = True

答案 1 :(得分:0)

xsum函数中您必须store resultscheck