【发布时间】:2015-11-15 10:40:33
【问题描述】:
目前我们在我们的应用程序中使用了大量的 celery 任务,我们有一个可能引发大量任务的异常。
我们可以在每个任务中创建一个 try 和 catch 块并相应地处理这个特定的异常,但我们正在寻找一种方法来从任何任务(如中间件行)中捕获任何异常以便于维护。
谁能给点建议?
我们使用以下版本:
celery==3.1.18
django-celery==3.1.16
Django==1.6.5
【问题讨论】:
目前我们在我们的应用程序中使用了大量的 celery 任务,我们有一个可能引发大量任务的异常。
我们可以在每个任务中创建一个 try 和 catch 块并相应地处理这个特定的异常,但我们正在寻找一种方法来从任何任务(如中间件行)中捕获任何异常以便于维护。
谁能给点建议?
我们使用以下版本:
celery==3.1.18
django-celery==3.1.16
Django==1.6.5
【问题讨论】:
这可以使用基本的抽象任务处理程序来完成。特别是对于异常,有一个 on_failure 处理程序。
from celery import Task
class MyBaseTask(Task):
abstract = True
def on_failure(self, exc, task_id, args, kwargs, einfo):
# Task failed. What do you want to do?
print('Task raised an exception: {}'.format(exc)
@app.task(base=MyBaseTask)
def my_task():
# Your task code
有关可用处理程序和传递给每个处理程序的参数的更多信息,请参阅 Celery 文档:http://docs.celeryproject.org/en/latest/userguide/tasks.html#abstract-classes
【讨论】: