2012-02-27 53 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 

我怎樣才能提高重試倒計時每次重試發生這份工作 - 例如60秒,2分鐘,4分鐘等等,直到MaxRetriesExceeded升高?

+1

我想你應該改變選擇的答案。 – guival 2017-11-27 12:54:13

回答

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 2017-08-09 07:00:03

7

每次保持一個變量在您最後一次重試時間,並乘以2,直到超過任何你想要的水平(或保持計數,如果你喜歡某個次數...)

+0

因此,沒有優雅/神奇的方式來做到這一點,而不是在每次重試時將重試計數器傳遞給方法? – Gregor 2012-02-27 18:34:58

+0

我對芹菜不太熟悉,但是如果你已經閱讀了手冊並且沒有找到它,這看起來像是一種簡單的方法,只用兩三行代碼即可完成你想要的任務,這似乎很容易。 – Perry 2012-02-27 18:36:52

+0

@Gregor,我認爲這很優雅,但也許我們可以添加一個retry_step。你可以在http://github.com/ask/issue上創建一個問題來請求這樣的功能。 – asksol 2012-02-27 20:25:23

0

由於version 4.2可以使用的選項autoretry_forretry_backoff這個目的,例如:

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