Обнаружение, когда задача сельдерея и все подзадачи выполнены - PullRequest
5 голосов
/ 30 июня 2011

У меня есть родительская задача, которая порождает произвольное и потенциально большое количество подзадач.После того, как родительский элемент и все подзадачи завершены, мне нужно установить флаг в моей базе данных, чтобы указать, что он готов.Как мне лучше всего это сделать?

Например:

@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 и все подзадачи, которые он вызывает, завершены, чтобы я мог установитьфлаг на связанной модели, чтобы указать, что все готово

Ответы [ 2 ]

4 голосов
/ 30 июня 2011

Использование Аккорды

Вы должны использовать [TaskSet] [1]: > TaskSet позволяет легко вызывать несколько задач одновременно, а затем может объединять результаты в том же порядке, в котором были вызваны задачи.
2 голосов
/ 13 февраля 2013

celery.chord предназначен именно для этого.

...