是否可以发送其他芹菜状态为“ FAILURE”的元数据?
目前,我只发现可以发送异常数据,而没有其他任何东西。理想情况下,我希望将其附带的一系列额外信息发送给我的前端。
答案 0 :(得分:0)
我不这么认为。但是,您可以访问任务的traceback属性以获取stacktrace,这有帮助吗?
答案 1 :(得分:0)
实际上,在深入研究之后,我找到了实现此目标的方法:
涉及一些技巧:
通过update_state
确保meta
参数符合Celery对FAILURE
状态的期望
指示Celery从队列中删除消息,但通过Ignore()
例如:
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']
如果您对此感兴趣,请写一篇博客文章https://www.distributedpython.com/2018/09/28/celery-task-states-感谢您的启发;-)