2011-06-30 116 views
5

我有一個父任務,它會產生任意數量的可能較大數量的子任務。一旦父級和所有子任務都完成了,我需要在我的數據庫中設置一個標誌來表明它已準備就緒。我最好怎麼做呢?檢測芹菜任務和所有子任務何時完成

例如:

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

我需要檢測時master_task和所有它產卵的子任務已經完成了,這樣我可以在相關模型設置一個標誌,表明是萬事俱備

回答

4

使用chords

您應該使用[使用taskset] [1]: >上使用taskset能夠在一次幾項任務輕鬆調用,然後能夠加入結果與調用任務的順序相同。
+0

請注意,「TaskSet已被刪除,因爲它已被Celery 3.0中的組構造所取代。」 – np8