Вы имеете в виду что-то вроде этого :

ery я хочу запускать задачу только тогда, когда все остальные задачи выполнены. Я нашел некоторые ресурсы, как этот:Сельдерей Начало задачи, когда другие задачи выполнены а такжеЗапуск задачи после завершения всех задач Но я новичок в сельдерее и не мог понять выше (или много других ресурсов по этому вопросу).

Итак, я определил задачу как вtasks.py:

@celapp.task()
def sampleFun(arg1, arg2, arg3):
    # do something here

и я называю это так:

for x in xrange(4):    
   tasks.sampleFun.delay(val1, val2, val3)

И я предполагаю, что будет создано 4 разных задания. Это на самом деле происходит, как я вижу то же самое на веб-интерфейсеЦветок сельдерея.

Теперь я хотел бы добавить еще одну задачу. СказатьfinalTask это должно начаться только после того, как все вышеуказанные 4 задачи завершат свое выполнение.

Я также читал некоторые документы нагруппы и аккорды в сельдерее но это говорит о том, что если я хочу сделать это, мне нужно сгруппировать свои задачи вместе, чтобы они выполнялись параллельно. Я не хочу этого делать. (Может быть, это хорошая идея, но сейчас моя цель - уметь понимать вещи. Поэтому в данный момент я не особо сосредоточен на производительности и т. Д.)

Как это сделать? Другой, более простой вопрос, который может показаться довольно глупым: когда мы говорим,tasks.sampleFun.delay это создает асинхронные задачи или нет?

 qre0ct27 окт. 2017 г., 15:54
но в моем случае, 4 вfor x in xrange(4): на самом деле динамический. Это количество загружаемых файлов, которое зависит от пользователя. Следовательно, мы не знаем этого заранее. Я пытался связать с неизменными примерами подписи вссылка и похоже, что для этого мне нужно было бы заранее знать количество задач, которые должны быть там, как показано в примерах `add.si (), чтобы они все могли быть переданы вместе.
 Aleksandr Borisov27 окт. 2017 г., 15:32
Вам нужна цепочка с неизменными подписями, см. Пример в документации по сельдерею по предоставленной вами ссылке. Задержка создает асинхронную задачу.
 qre0ct27 окт. 2017 г., 16:07
Вы имеете в виду что-то вроде этого :my_list = [] for x in xrange(4): my_list.append(tasks.sampleFun.si(val1, val2, val3)) chain(my_list)() ?
 Aleksandr Borisov27 окт. 2017 г., 16:02
Вы можете создать списокtasks.sampleFun.si(val1, val2, val3) (si вместоdelay) и передать этот списокchain функция.

Ответы на вопрос(0)

Ваш ответ на вопрос