Запуск задачи после завершения всех задач
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
метод называется. Есть ли способ, чтобы каждая задача могла запускаться отдельно, и тогда я мог бы добавить обратный вызов в группу, чтобы она запускалась, когда все закончилось?