RNE*_*RNE 7 python celery celery-task
Celery - 底线:我想通过使用任务 id 来获取任务名称(我没有任务对象)
假设我有这个代码:
res = chain(add.s(4,5), add.s(10)).delay()
cache.save_task_id(res.task_id)
Run Code Online (Sandbox Code Playgroud)
然后在其他地方:
task_id = cache.get_task_ids()[0]
task_name = get_task_name_by_id(task_id) #how?
print(f'Some information about the task status of: {task_name}')
Run Code Online (Sandbox Code Playgroud)
我知道如果我有一个任务对象,我可以得到任务名称,比如这里:celery: get function name by task id? . 但是我没有任务对象(也许它可以由 task_id 或其他方式创建?我在文档中没有看到任何与此相关的内容)。
另外,我不想在缓存中保存任务名称。(假设我有一个很长的链/其他 celery 原语,我不想保存它们的所有名称/task_ids。仅最后一个 task_id 应该足以获取有关所有任务的所有信息,使用 .parents 等)
我查看了 AsyncResult 和 AsyncResult.Backend 对象的所有相关方法。唯一似乎相关的是 backend.get_task_meta(task_id),但它不包含任务名称。提前致谢
PS:AsyncResult.name 总是返回 None:
result = AsyncResult(task_id, app=celery_app)
result.name #Returns None
result.args #Also returns None
Run Code Online (Sandbox Code Playgroud)
终于找到答案了。对于任何想知道的人:您可以通过result_extended = True在 celery 配置中启用来解决这个问题。然后:
result = AsyncResult(task_id, app=celery_app)
result.task_name #tasks.add
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1663 次 |
| 最近记录: |