2012-02-27 17 views

答えて

28
(...または、あなたが特定の回数を好む場合は、カウントを維持する)ことで、あなたの最後の再試行時間の変数を保持し、そしてそれはあなたが好きなレベルを超えるまで2ずつそれを掛けます

ここでは、タスクが評価されるたびに大きな遅延を作成する簡単な方法があります。この値はセロリ自体によって更新されるので、自分で何も管理する必要はありません。

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

注:再試行の回数は最初の実行のために0であるため、最初のタスクが0のカウントダウンで繰り返されます。

+0

* addに言及してくださってありがとうございます(* add.retry(countdown = interval +(step * add.request.retries) ' – Kaveh

7

+0

したがって、再試行ごとにメソッドに再試行カウンタを渡す代わりに、これを行うエレガント/魔法の方法はありませんか? – Gregor

+0

私はセーラーに精通していませんが、マニュアルを読んでもそれを見つけられなかった場合は、2〜3行のコードで簡単にやり遂げることができます。 – Perry

+0

@Gregor、これはエレガントだと思いますが、retry_stepも追加できます。このような機能をリクエストするには、http://github.com/ask/issueで問題を作成することができます。 – asksol

0

version 4.2ので、あなたは、例えば、この目的のためにオプションautoretry_forretry_backoffを使用することができます。

@task(max_retries=10, autoretry_for=(Exception,), retry_backoff=60) 
def add(x, y): 
    pass 
関連する問題