我有这样的芹菜代码示例:
from __future__ import absolute_import
from proj.celery import app
@app.task
def add(x, y):
try:
return x + y
except Exception,e:
raise
@app.task
def mul(x, y):
try:
return x * y
except Exception,e:
raise
@app.task
def xsum(numbers):
return sum(numbers)
因此,如果前两个任务xsum
和add
中的任何一个引发任何异常,我不想调用第三个任务mul
。我如何在芹菜中做到这一点?
答案 0 :(得分:0)
您需要revoke
任务:
from celery.task.control import revoke
@app.task
def add(x, y):
try:
return x + y
except Exception,e:
revoke(xsum.request.id)
@app.task
def mul(x, y):
try:
return x * y
except Exception,e:
revoke(xsum.request.id)
@app.task
def xsum(numbers):
return sum(numbers)
答案 1 :(得分:0)
我认为在你的情况下我们错过了你如何调用第三个任务,无论如何当我们有一个任务取决于一个或多个其他任务时,我们通常使用一个包装任务来调用前两个任务并等待结果,如果两者都胜过第三项任务。 你可以使用很棒的芹菜画布来实现这个目标
http://celery.readthedocs.org/en/latest/userguide/canvas.html
Canvas可让您实现与您相同的常用工作流程。 可能在您的情况下,您可以使用Chord画布。 希望这有帮助