如何在未捕获异常引发时设置芹菜任务状态

时间:2018-04-17 17:31:58

标签: python task celery

我有芹菜任务

@app.task
def add(x, y):
    try:
        return call_another_function(x, y)
    except ValueError as ex:
        handle_value_error(ex)

我正在处理ValueError,但如果call_another_function引发其他例外,例如IOErrorIndexError会怎样?

Celery有任何机制,如果我们不在代码中处理异常,我们可以设置app.call_for_any_exception和方法调用吗?

我只是想确保,如果有任何异常,我的任务应该处于fail状态。

我正在使用celery v4.0.2

1 个答案:

答案 0 :(得分:1)

添加另一个except子句,没有任何异常来捕获:

try:
    return call_another_function(x, y)
except ValueError as ex:
    handle_value_error(ex)
except:
    update_state(state=FAILED)
    raise

如果您想要解决许多任务的问题,可以使用the documentation中提出的这种方式:

class MyTask(celery.Task):

    def on_failure(self, exc, task_id, args, kwargs, einfo):
        self.update_state(state=FAILED)

@task(base=MyTask)
def add(x, y):
    try:
        return call_another_function(x, y)
    except ValueError as ex:
        handle_value_error(ex)