【问题标题】:Detecting when a celery task and all subtasks have completed检测芹菜任务和所有子任务何时完成
【发布时间】:2011-06-30 07:06:20
【问题描述】:

我有一个父任务,它会产生任意数量的子任务,并且可能会产生大量子任务。一旦父任务和所有子任务都完成,我需要在我的数据库中设置一个标志以指示它已准备好。我最好怎么做?

例如:

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

【问题讨论】:

    标签: python django celery django-celery


    【解决方案1】:

    使用chords

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

    【讨论】:

    • 请注意,“TaskSet 已被删除,因为它已被 Celery 3.0 中的组结构所取代。”
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-10-28
      • 2020-07-09
      • 2017-10-14
      • 2020-05-19
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多