【问题标题】:Get the task_name from AsyncResult when submitting chains in celery在 celery 中提交链时从 AsyncResult 获取 task_name
【发布时间】:2015-07-21 02:19:52
【问题描述】:

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

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

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

我可以使用这样的内部_parents() 方法检索 task_Bid 并因此检索 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

为什么会这样?这可能是一个错误吗? 我注意到,通过提交单个任务,AsyncResulttask_name 属性可以正常工作并返回正确的任务名称。

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

提前谢谢大家。

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

celery-users

更新

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

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

【问题讨论】:

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


    【解决方案1】:

    一种方法可以像这样将它保存到缓存中:

    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")
    

    但我不会指望它

    【讨论】:

    • 你的第一个答案是无关紧要的。另一方面,您的更新建议使用不带此类属性的apply_async 方法的name 参数。
    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 2013-06-13
    • 2019-07-18
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多