Executando uma tarefa após todas as tarefas terem sido concluídas

Estou escrevendo um aplicativo que precisa executar uma série de tarefas em paralelo e, em seguida, uma única tarefa com os resultados de todas as tarefas executadas:

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

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

É um exemplo muito simplista e simplista, mas espero que o ponto se apresente bem. Basicamente eu tenhomuitos itens que precisam passar porpower, mas eu só quero correramass nos resultados de todas as tarefas. Tudo isso deve acontecer de forma assíncrona, e eu não preciso de nada de volta doamass método.

Alguém sabe como configurar isso no aipo para que tudo seja executado de forma assíncrona e um único retorno de chamada com uma lista dos resultados é chamado depois de tudo dito e feito?

Eu configurei este exemplo para rodar com umchord como Alexander Afanasiev recomendou:

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)

Infelizmente, no exemplo acima, todas as tarefas emtasks são iniciados somente quando ochord método é chamado. Existe uma maneira que cada tarefa pode iniciar separadamente e, em seguida, eu poderia adicionar um retorno de chamada ao grupo para executar quando tudo tiver terminado?

questionAnswers(4)

yourAnswerToTheQuestion