Запуск задачи после завершения всех задач

m написание приложения, которое должно выполнять серию задач параллельно, а затем одну задачу с результатами всех выполненных задач:

@celery.task
def power(value, expo):
    return value ** expo

@celery.task
def amass(values):
    print str(values)

Это'Это очень надуманный и упрощенный пример, но, надеюсь, с этим все хорошо. В основном у менямного предметы, которые нужно пробежатьpower, но я хочу только бежатьamass по результатам всех заданий. Все это должно происходить асинхронно, и я нене нужно ничего возвращать изamass метод.

Кто-нибудь знает, как настроить это в сельдерее, чтобы все выполнялось асинхронно и после того, как все сказано и сделано, вызывается один обратный вызов со списком результатов?

Мы настроили этот пример для запуска сchord как рекомендовал Александр Афанасьев:

from time import sleep

import random

tasks = []

for i in xrange(10):
    tasks.append(power.s((i, 2)))
    sleep(random.randint(10, 1000) / 1000.0) # sleep for 10-1000ms

callback = amass.s()

r = chord(tasks)(callback)

К сожалению, в приведенном выше примере все задачи вtasks запускаются только тогда, когдаchord метод называется. Есть ли способ, чтобы каждая задача могла запускаться отдельно, и тогда я мог бы добавить обратный вызов в группу, чтобы она запускалась, когда все закончилось?

Ответы на вопрос(4)

Ваш ответ на вопрос