Celery配置用于重试退避

时间:2019-11-06 05:28:36

标签: celery django-celery celery-task

我想让我的应用程序中所有异步任务在发生任何异常时都重试,并且还希望重试遵循指数补偿。

@celery_app.task(autoretry_for=(Exception,))
def some_task():
    ...

在我的配置中,我有

CELERY_TASK_ANNOTATIONS = {'*': {'max_retries': 5, 'retry_backoff': 5}}

max_retries设置可以正常工作,现在所有任务都将重试5次,然后再失败。但是所有这些都将在180秒后重试。 我希望所有任务都能遵循retry_backoff,而不必为每个任务都指定它,以便我可以随时在一个地方更改它。

2 个答案:

答案 0 :(得分:2)

根据Celery documentation,您想要设置的属性为retry_backoff_max

Task.retry_backoff_max

一个数字。如果启用了retry_backoff,则此选项将设置最大值 任务自动重试之间的延迟秒数。默认情况下,此选项为 设置为600,即10分钟。

retry_backoff是布尔值,因此很可能会忽略您提供的5的值。

Task.retry_backoff

布尔值或数字。如果此选项设置为 没错,自动重试将遵循指数规则 退缩。第一次重试将延迟1秒,第二次 重试将延迟2秒,第三次将延迟4秒, 第四个将延迟8秒,依此类推。 (但是,此延迟值 如果启用,则由retry_jitter修改。)如果设置了此选项 到一个数字,它用作延迟因子。例如,如果此选项 设置为3,第一次重试将延迟3秒,第二次将 延迟6秒,第三个将延迟12秒,第四个将 延迟24秒,依此类推。默认情况下,此选项设置为False, 并且自动重试不会延迟。

答案 1 :(得分:0)

为避免在多个位置进行更改,您可以做的是拥有一个全局变量,例如global_retry_backoff=5,您将在任务注释中使用它:@celery_app.task(autoretry_for=(Exception,), retry_backoff=global_retry_backoff)