【问题标题】:Middleware for celery taskscelery 任务的中间件
【发布时间】:2015-11-15 10:40:33
【问题描述】:

目前我们在我们的应用程序中使用了大量的 celery 任务,我们有一个可能引发大量任务的异常。

我们可以在每个任务中创建一个 try 和 catch 块并相应地处理这个特定的异常,但我们正在寻找一种方法来从任何任务(如中间件行)中捕获任何异常以便于维护。

谁能给点建议?

我们使用以下版本:

celery==3.1.18
django-celery==3.1.16
Django==1.6.5

【问题讨论】:

    标签: django celery


    【解决方案1】:

    这可以使用基本的抽象任务处理程序来完成。特别是对于异常,有一个 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

    【讨论】:

    • 有了这个,我无法在代理关闭时捕获 OperationError。
    猜你喜欢
    • 2018-06-03
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2018-01-20
    • 2015-12-11
    • 2016-05-03
    • 2016-09-28
    相关资源
    最近更新 更多