Сельдерей группы и цепи - PullRequest
0 голосов
/ 28 июня 2018

Мне нужно отсортировать некоторые задачи в Celery так, чтобы некоторые из них работали как одна задача, а некоторые должны работать параллельно, а когда задачи в группе завершены, она должна пройти следующую:

chain(
    task1.s(),
    task2.s(),
    group(task3.s(), task4.s()), 
    group(task5.s(), task6.s(), task7.s()), 
    task7.s()
).delay()

Но я думаю, что я сделал неправильно. У кого-нибудь есть идеи как это сделать?

Кроме того, меня не волнует отправка результатов каждого задания другим.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Наконец-то сработало:

chain(
    task1.s(),
    task2.s(),
    chord([task3.s(), task4.s()], body=task_result.s(), immutable=True), 
    chord([task5.s(), task6.s(), task7.s()], body=task_result.s(), immutable=True), 
    task7.s()
).delay()
0 голосов
/ 28 июня 2018

Это звучит как аккорд, то есть когда вы выполняете задачи параллельно и у вас есть обратный вызов для другой задачи, когда параллельные задачи завершены: http://docs.celeryproject.org/en/latest/userguide/canvas.html#chords

Так что, возможно, вам придется изменить что-то вроде: цепочка (task1.s (), task2.s (), аккорд (task3.s (), task4.s ()) (аккорд (task5.s (), task6.s (), task7.s ()) ( task7.s ())))

Кроме того, цепочки / группы и т. Д. Всегда возвращают результаты и передают их дочерним задачам, поэтому вы должны соответствующим образом смоделировать аргументы задачи.

Поскольку это довольно сложный рабочий процесс, вам, возможно, было бы лучше вызвать следующую задачу из предыдущей задачи (например, вызвать task2.s (). Delay () в конце задачи 1) - но я думаю, что нет никакого способа обойти моделирование аккорда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...