2011-06-30 13 views
5

Mam zadanie nadrzędne, które spowoduje odrodzenie arbitralnej i potencjalnie dużej liczby podzadań. Kiedy zarówno rodzic, jak i wszystkie podzadania zostały zakończone, muszę ustawić flagę w mojej bazie danych, aby wskazać, że jest gotowa. Jak najlepiej to zrobię?Wykrywanie, kiedy zadanie związane z selerem i wszystkie podzadania zostało ukończone.

Na przykład:

@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() 

muszę wykryć kiedy master_task i wszystkich podzadań to ma tarła zakończeniu tak, że mogę ustawić flagę na pokrewnego modelu wskazują, że wszystko jest gotowe

Odpowiedz

4

Zastosowanie chords

należy użyć [taskset] [1]: > THE taskset umożliwia łatwe wywołanie kilku zadań na raz, a następnie jest w stanie przyłączyć się do wyników w w takiej samej kolejności, w jakiej były wykonywane zadania.
+0

Należy zauważyć, że "TaskSet został usunięty, ponieważ został zastąpiony przez konstrukcję grupy w Celery 3.0." – np8