我应该如何检索任务的名称当我有AsyncResult
对象并因此是id
?
例如,如果我在链条中启动两个任务:
>>> task_chain = (task_A.s() | task_B.s())
>>> async_result = task_chain.apply_async()
我可以使用类似的内部_parents()
方法来检索 task_b 的id
,并因此可以检索 task_a
>>> async_result.id
>>> 2ed28e84-0673-4491-a56f-c5ab8dfb5725
>>> async_result._parents()[0].id
>>> e793f4dc-5110-4f57-8f98-8caa48c40528
但是,当我尝试检索task_name时,我什么也没回来:
>>> async_result.task_name
>>> async_result._parents()[0].task_name
为什么会发生这种情况?这可能是一个错误吗?我注意到,通过提交一个任务,task_name
的CC_5属性效果很好,并返回了正确的任务名称。
是否有其他方法可以从异步对象检索任务名称?
提前谢谢大家。
P.S。我已经在这里找到了一个类似的问题,但是似乎没有人提出一个实践和有效的解决方案。
芹菜用户
update
显然,似乎我已经用一堵墙撞了一堵墙。Github上有一个关于完全相同的问题的公开票,其涉及组而不是链条的差异。
https://github.com/celery/celery/issues/2504
这样做的一种方法,将其保存到高速缓存中:
cache.set(hash_key, result, 30) # save result to cache for 30 seconds
您可以通过其钥匙检索:
result = cache.get(hash_key)
假设其不是含量缓存
update
对不起,我误解了这个问题。
我认为发生的事情是,任务chain Asyncresult的结果仅以任务ID作为其唯一要求。也许如果您尝试过:
async_result = task_chain.apply_async(name="mytasks")
,但我不会指望它