每次重试周期增加芹菜重试时间

时间:2012-02-27 18:20:17

标签: python celery celeryd

我像在文档示例中一样重复使用芹菜:

@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 个答案:

答案 0 :(得分:30)

这是一种在每次评估任务时创建更大延迟的简单方法。这个值由芹菜本身更新,因此您不需要自己管理任何东西。

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

注意:重复第一个任务,倒计时为0.因为第一次运行的重试次数为0。

答案 1 :(得分:7)

保留一个变量,其中包含您的最后一次重试时间,并将其每次乘以2,直到它超出您想要的任何级别(或者,如果您喜欢一定次数,请保持计数......)

答案 2 :(得分:4)

version 4.2以来,您可以将选项autoretry_forretry_backoff用于此目的,例如:

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