我有芹菜任务
@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
引发其他例外,例如IOError
或IndexError
会怎样?
Celery有任何机制,如果我们不在代码中处理异常,我们可以设置app.call_for_any_exception
和方法调用吗?
我只是想确保,如果有任何异常,我的任务应该处于fail
状态。
我正在使用celery v4.0.2
。
答案 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)