2011-06-30 83 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