我正在尝试打印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
答案 0 :(得分:0)
由于GroupResult
的children
属性只是AsyncResult
实例的序列,因此它应该能够通过结果的name
属性来获取任务名称,例如就您而言
for c in ping_results.children:
print("{0}[{1}]: {2}".format(c.name, c, c.status))