Celery 上的其他元数据 'FAILURE'
Additional Metadata on Celery 'FAILURE'
是否可以使用 Celery 'FAILURE' 状态发送额外的元数据?
目前我只发现可以发送异常数据,除此之外别无他法。理想情况下,我想用它发送一系列可以由我的前端获取的额外信息。
我不这么认为。但是,您可以访问任务的回溯 属性 以获取堆栈跟踪,这有帮助吗?
实际上,在深入研究之后,我找到了实现这一目标的方法:
这里涉及到一些技巧:
通过update_state
设置任务状态
确保 meta
参数符合 Celery 对 FAILURE
状态的期望
指示Celery从队列中删除消息,但通过Ignore()
禁用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 - 感谢您的启发 ;-)
是否可以使用 Celery 'FAILURE' 状态发送额外的元数据?
目前我只发现可以发送异常数据,除此之外别无他法。理想情况下,我想用它发送一系列可以由我的前端获取的额外信息。
我不这么认为。但是,您可以访问任务的回溯 属性 以获取堆栈跟踪,这有帮助吗?
实际上,在深入研究之后,我找到了实现这一目标的方法:
这里涉及到一些技巧:
通过
update_state
设置任务状态
确保
meta
参数符合 Celery 对FAILURE
状态的期望指示Celery从队列中删除消息,但通过
Ignore()
禁用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 - 感谢您的启发 ;-)