在芹菜

时间:2015-05-10 15:19:51

标签: django celery django-celery celery-task celeryd

当我获得AsyncResult对象并因此id时,我应该如何检索任务的名称

例如,如果我在链中启动了两个任务:

>>> task_chain = (task_A.s() | task_B.s())
>>> async_result = task_chain.apply_async()

我可以使用内部id方法检索 task_B _parents(),然后 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的{​​{1}}属性完全正常,并返回正确的任务名称。

还有其他方法可以从AsyncResult对象中检索任务的名称吗?

提前谢谢大家。

P.S。 我已经在这里找到了类似的问题,但似乎没有人提出一个实用且有效的解决方案。

celery-users

更新

显然我似乎碰到了这个墙。在github上有一个关于完全相同问题的公开票,区别在于它涉及组而不是链。

https://github.com/celery/celery/issues/2504

1 个答案:

答案 0 :(得分:-3)

其中一种方法是将其保存到缓存中:

left join

您可以通过密钥检索它:

cache.set(hash_key, result, 30)  # save result to cache for 30 seconds

假设它不是InMemory缓存

<强>更新

抱歉,我误解了这个问题。

我认为发生的事情是task_chain AsyncResult的结果初始化时只将任务ID作为唯一要求。也许你试试这个:

result = cache.get(hash_key) 

但我不指望它