我想让我的应用程序中的所有异步任务在任何异常情况下重试,也希望重试遵循指数后退。
@celery_app.task(autoretry_for=(Exception,))
def some_task():
...
在我的配置中,我有
CELERY_TASK_ANNOTATIONS = {'*': {'max_retries': 5, 'retry_backoff': 5}}
max_retrys设置有效,所有任务在失败之前都会重试5次。但所有这些都会在180秒后重试。我想让所有任务都遵循retry_backoff
,而不必为每个任务指定它,这样我就可以随时在一个地方更改它。
根据Celery文档,您想要设置的属性似乎是retry_backoff_max
。
任务.retry_backoff_max
一个数字。如果启用了retry_backoff,则此选项将设置最大值任务自动重试之间的延迟(秒(。默认情况下,此选项为设置为600,即10分钟。
retry_backoff
可以是一个数字或布尔值,基于此,回退将表现不同。对于指数后退,您似乎希望将其设置为true。
任务.retry_backoff
布尔值或数字。如果此选项设置为是的,自动重试将按照指数规则延迟后退。第一次重试将延迟1秒,第二次重试重试将具有2秒的延迟,第三次将延迟4秒,第四个将延迟8秒,依此类推。(但是,此延迟值如果已启用,则由retry_tjitter修改。(如果设置了此选项对于一个数字,它被用作延迟因子。例如,如果此选项设置为3,第一次重试将延迟3秒,第二次重试将延迟6秒,第三个将延迟12秒,第四个将延迟24秒,依此类推。默认情况下,此选项设置为False,并且自动重试不会被延迟。
要避免在多个地方更改它,可以使用一个全局变量,比如global_retry_backoff=5
,您将在任务注释中使用它:@celery_app.task(autoretry_for=(Exception,), retry_backoff=global_retry_backoff)
。