我可以在使用任务装饰器创建的芹菜任务中添加on_failure回调吗?

时间:2014-01-10 23:33:07

标签: celery

我很确定这只能在我创建自己的任务类时才能完成,但我想知道是否有其他人找到了这样做的方法。

2 个答案:

答案 0 :(得分:14)

这是一个完整的解决方案(适用于Celery 4 +):

import celery
from celery.task import task

class MyBaseClassForTask(celery.Task):

    def on_failure(self, exc, task_id, args, kwargs, einfo):
        # exc (Exception) - The exception raised by the task.
        # args (Tuple) - Original arguments for the task that failed.
        # kwargs (Dict) - Original keyword arguments for the task that failed.
        print('{0!r} failed: {1!r}'.format(task_id, exc))

@task(name="foo:my_task", base=MyBaseClassForTask)
def add(x, y):
    raise KeyError()

资源:

答案 1 :(得分:1)

您可以直接将功能提供给装饰器:

def fun(self, exc, task_id, args, kwargs, einfo):
    print('Failed!')

@task(name="foo:my_task", on_failure=fun)
def add(x, y):
    raise KeyError()