【问题标题】:celery: print the status of each task within a group started with apply_asynccelery:打印以 apply_async 开始的组中每个任务的状态
【发布时间】:2019-05-03 18:57:56
【问题描述】:

我正在尝试打印 4 个远程任务的状态,从组内的每个 AsyncResult 中获取信息。

到目前为止,我可以打印状态,但不能打印生成(或尚未生成)AsyncResult 的任务的名称(请参阅下面的控制台打印)

我遇到的另一个问题是,虽然该组是使用 apply_async(expires=30) 启动的,但没有到期,只要有一个子任务“PENDING”,循环就会永远持续下去。

from celery import group

ping_results = group(
    ping_portal.s(),
    ping_factory.s(),
    ping_factory_m.s(),
    ping_proxy.s()
).apply_async(expires=30)

while ping_results.waiting():

    c = ping_results.completed_count()

    print("{0} nodes have responded".format(c))

    for c in ping_results.children:
        print("{0}: {1}".format(c, c.status))

控制台:

3 nodes have responded
33cae071-8944-4a56-9cc1-d0c83bfb0a20: PENDING
97f9a481-8d31-4889-9ea2-6f43d7561443: SUCCESS
8f030dfe-e235-4794-8a84-bf583992528a: SUCCESS
b971a4ac-d23f-4378-b8b6-2c55f3d05618: SUCCESS

【问题讨论】:

    标签: python celery celery-task


    【解决方案1】:

    由于GroupResult的children属性只是AsyncResult实例的序列,它应该可以通过结果的name属性获取任务名称,例如在你的情况下像

    for c in ping_results.children:
        print("{0}[{1}]: {2}".format(c.name, c, c.status))
    

    【讨论】:

      猜你喜欢
      • 2013-11-23
      • 2014-06-13
      • 2012-02-11
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      相关资源
      最近更新 更多