Увеличьте время повтора сельдерея в каждом цикле повтора - PullRequest
15 голосов
/ 27 февраля 2012

Я делаю повторы с сельдереем, как в Docs-Пример:

@task()
def add(x, y):
    try:
        ...
    except Exception, exc:
        add.retry(exc=exc, countdown=60)  # override the default and
                                          # retry in 1 minute

Как можно увеличить обратный отсчет при каждой повторной попытке для этого задания, например, 60 секунд, 2 минуты, 4 минуты и так далее до тех пор, пока не будет увеличено значение MaxRetriesExceeded?

Ответы [ 3 ]

30 голосов
/ 11 апреля 2014

Вот простой способ создать большую задержку каждый раз, когда задача оценивается.Это значение обновляется самим сельдереем, поэтому вам не нужно ничего самому управлять.

@task()
def add(x, y):
    try:
        ...
    except Exception as exc:
        raise add.retry(exc=exc, countdown=60 * add.request.retries) 

Примечание: первая задача повторяется с обратным отсчетом 0. Поскольку число повторных попыток равно 0 для первого запуска.

7 голосов
/ 27 февраля 2012

Сохраняйте переменную с вашим последним временем повторения и умножайте ее на 2 каждый раз, пока она не превысит желаемый уровень (или сохраните счет, если вы предпочитаете определенное количество раз ...)

5 голосов
/ 19 февраля 2018

Начиная с версии 4.2 вы можете использовать для этих целей опции autoretry_for и retry_backoff, например:

@task(max_retries=10, autoretry_for=(Exception,), retry_backoff=60)
def add(x, y):
    pass
...