celery: выводит состояние каждой задачи в группе, которая начинается с apply_async - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь распечатать статус 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

1 Ответ

0 голосов
/ 04 мая 2019

Поскольку children атрибут GroupResult является просто последовательностью AsyncResult экземпляров, он должен иметь возможность получить имя задачи по атрибуту name результата, например, в вашем случае что-то вроде

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