Цепь сельдерея разрывается, если одна из задач не выполняется

Какой смысл в цепочке 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) в этом отношении далека от явной, но название предполагает следующую семантику: "Цепь настолько сильна, насколько слабее ее звено".

Другие вопросы по тегам