2012-02-27 2 views
15

я повторные попытки с сельдереем, как в Документах-примере:Увеличения времени сельдерея повторов каждого повтор цикл

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

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

+1

Я думаю, вы должны изменить выбранный ответ. – guival

ответ

28

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

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

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

+0

Спасибо за упоминание * add .request.retries * – Kaveh

7

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

+0

Итак, нет никакого элегантного/волшебного способа сделать это вместо того, чтобы передавать счетчик повторов методу на каждом повторе? – Gregor

+0

Я недостаточно знаком с сельдереем, но если вы прочитали руководство и не нашли его, это похоже на простой способ выполнить то, что вы хотите, только с двумя или тремя строками кода, что кажется достаточно простым. – Perry

+0

@ Грегор, я думаю, что это изящно, но, возможно, мы могли бы добавить retry_step. Вы можете создать проблему по адресу http://github.com/ask/issue, чтобы запросить такую ​​функцию. – asksol

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^