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

2 回答 2

4

使用和弦

您应该使用 [TaskSet][1]: > TaskSet 可以轻松地同时调用多个任务,然后能够以与调用任务相同的顺序加入结果。
于 2011-06-30T07:29:47.533 回答
2

celery.chord正是为此而设计的。

于 2013-02-13T00:48:54.737 回答