2

当我得到它的对象并因此得到它时,我应该如何检索任务的名称AsyncResultid

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

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

我可以使用如下内部方法检索idtask_B和task_A :_parents()

>>> 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属性AsyncResult可以正常工作并返回正确的任务名称。

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

谢谢大家。

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

芹菜用户

更新

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

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

4

1 回答 1

-3

一种方法将其保存到缓存中,如下所示:

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

你可以通过它的键来检索它:

result = cache.get(hash_key) 

假设它不是 InMemory 缓存

更新

对不起,我误解了这个问题。

我认为发生的事情是 task_chain AsyncResult 的结果被初始化,只有任务 id 作为它的唯一要求。也许如果您尝试这样做:

async_result = task_chain.apply_async(name="mytasks")

但我不会指望它

于 2015-05-10T15:23:14.653 回答