我有一个父任务,它将产生任意且可能数量较大的子任务。一旦父级和所有子任务都完成,我需要在数据库中设置一个标志来表明它已经准备好了。我将如何最好地做到这一点?

例如:

@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及其产生的所有子任务何时完成,以便可以在相关模型上设置标志以指示一切就绪

最佳答案

使用chords

您应该使用[TaskSet] [1]:
> TaskSet使一次轻松调用多个任务成为可能,然后能够以与调用任务相同的顺序加入结果。

关于python - 检测 celery 任务和所有子任务何时完成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6531133/

10-12 12:29
查看更多