Celery 上的其他元数据 'FAILURE'

Additional Metadata on Celery 'FAILURE'

是否可以使用 Celery 'FAILURE' 状态发送额外的元数据?

目前我只发现可以发送异常数据,除此之外别无他法。理想情况下,我想用它发送一系列可以由我的前端获取的额外信息。

我不这么认为。但是,您可以访问任务的回溯 属性 以获取堆栈跟踪,这有帮助吗?

实际上,在深入研究之后,我找到了实现这一目标的方法:

这里涉及到一些技巧:

  1. 通过update_state

  2. 设置任务状态
  3. 确保 meta 参数符合 Celery 对 FAILURE 状态的期望

  4. 指示Celery从队列中删除消息,但通过Ignore()

  5. 禁用Celery的内部任务状态记录

例如:

from celery import states
from celery.exceptions import Ignore

@app.task(bind=True)
def task(self):
    try:
        raise ValueError('Some error')
    except Exception as ex:
        self.update_state(
            state=states.FAILURE,
            meta={
                'exc_type': type(ex).__name__,
                'exc_message': traceback.format_exc().split('\n')
                'custom': '...'
            })
        raise Ignore()

检索 AsyncResult 时,可通过 task.backend.get() 调用获得额外的自定义数据:

task = tasks.task.s().delay()
meta = task.backend.get(task.backend.get_key_for_task(task.id))
json.loads(meta.decode('utf8'))['result']['custom']

如果您对这方面的更多背景信息感兴趣,我已经写了一篇关于它的博客 post:https://www.distributedpython.com/2018/09/28/celery-task-states - 感谢您的启发 ;-)