在芹菜中发生异常时如何调用方法?

时间:2014-06-25 07:19:30

标签: python celery

我有这样的芹菜代码示例:

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)

因此,如果前两个任务xsumadd中的任何一个引发任何异常,我不想调用第三个任务mul。我如何在芹菜中做到这一点?

2 个答案:

答案 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画布。 希望这有帮助