Цепь сельдерея разрывается, если одна из задач не выполняется
Какой смысл в цепочке Celery, если вся цепочка обрывается, если одна из задач не выполняется?!!
У меня есть эта сеть сельдерея:
res = chain(workme.s ( y=1111 ), workme2.s( 2222 ), workme3.s( 3333 ),)()
И я сделал workme2 терпит неудачу с повторениями как это:
@celery.task(default_retry_delay=5, max_retries = 10, queue="sure")
def workme2(x,y):
# try:
try:
print str(y)
sleep(2)
print str(x)
## adding any condition that makes the task fail
if x!=None:
raise Exception('Aproblem from your workme task')
print 'This is my username: ' + str(x['user']) + \
' And Password: ' + str(x['pas'])
return "22xx"
except Exception, exc:
workme2.retry(args=[x,y], exc=exc,)
1 ответ
В этом все дело.
Формирование цепочки означает, что ваши подзадачи имеют некоторую последовательную зависимость: каждая имеет смысл, только если была выполнена предыдущая. Без этого вы бы просто использовали очереди или группу, а не цепочку.
Таким образом, если одна подзадача дает сбой (и по-прежнему происходит сбой после попытки всех ее повторных попыток), цепочка дает сбой.
Я с готовностью признаю, что документация (начиная с Celery 3.1.18) в этом отношении далека от явной, но название предполагает следующую семантику: "Цепь настолько сильна, насколько слабее ее звено".