2011-06-30 7 views
5

Tengo una tarea primaria que engendrará un número arbitrario y potencialmente grande de subtareas. Una vez que tanto el padre como todas las subtareas se hayan completado, necesito establecer un marcador en mi base de datos para indicar que está listo. ¿Cómo podría hacer eso?Detectando cuando una tarea de apio y todas las subtareas se han completado

Por ejemplo:

@task() 
def master_task(foo): 
    foo_obj = Foo.objects.get(id=foo) 
    for bar in foo_obj.bar_set.all(): 
     more_work.delay(bar.id) 

@task() 
def more_work(bar): 
    bar_obj = Bar.objects.get(id=bar) 
    do_work() 

necesito para detectar cuando el master_task y todas las subtareas que tiene desova han completado para que pueda establecer un indicador en un modelo relacionado para indicar que todo está listo

Respuesta

4

uso chords

debe utilizar un [taskset] [1]: > El taskset permite una fácil invocación de varias tareas a la vez, y es entonces capaz de unirse a los resultados de el mismo orden que las tareas fueron invocadas.
+0

Tenga en cuenta que "TaskSet se ha eliminado, ya que fue reemplazado por la construcción de grupo en Celery 3.0". – np8

Cuestiones relacionadas