首页 > 解决方案 > 将参数传递给 Celery on_error 任务

问题描述

我使用celerywithrabbitMQ作为代理来管理异步任务。

我正在将一些任务组合在一起,当它们中的每一个都完成后,我正在运行一个连接任务,它将加入每个结果。这些任务集合由我设置的report_id标识。

chord([task1.s(report_id=report_id), task2.s(report_id=report_id)...]) \
 (concat_task.s(report_id=report_id).set(queue='default') \
 .on_error(on_chord_error.s().set(queue='default')))

这是我的自定义on_error任务:

@celery_app.task
def on_chord_error(request, exc, traceback):
    logger.error('Chord {0!r} raised error: {1!r}'.format(request.id, exc), exc_info=(type(exc), exc.args, traceback))
    # BaseHandler.remove_placeholder(???report_id???)  # cleaning action

我的问题是on_error:每次和弦失败(出于任何原因)我需要将report_id(不要与request.id混淆)传递给它以执行清理操作。但是,我发现的文档对此含糊不清。似乎我无法像为单打和串联任务所做的那样将 request_id 作为任务签名的参数传递。

任何帮助,将不胜感激

标签: pythoncelery

解决方案


推荐阅读