18

我在 Docs-Example 中使用 celery 重试:

@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 被提高?

4

3 回答 3

35

这是每次评估任务时创建更大延迟的简单方法。这个值是由 celery 自己更新的,所以你不需要自己管理任何东西。

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

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

于 2014-04-11T14:22:08.193 回答
10

4.2 版开始,您可以使用选项autoretry_forretry_backoff为此目的,例如:

@task(max_retries=10, autoretry_for=(Exception,), retry_backoff=60)
def add(x, y):
    pass
于 2018-02-19T13:04:53.050 回答
7

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

于 2012-02-27T18:23:06.890 回答