我有一个像这样的芹菜任务队列:
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
当且仅当其他两个任务add
和mul
都正确成功时。我怎么能用芹菜做这个?
答案 0 :(得分:3)
您应该使用某些画布,例如chain
或chord
(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 results和check。