【问题标题】:Celery configuration for retry backoff用于重试退避的 Celery 配置
【发布时间】:2019-11-06 05:28:36
【问题描述】:

我希望我的应用程序中的所有异步任务在出现任何异常时都重试,并且还希望重试遵循指数退避。

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

在我的配置中

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

max_retries 设置有效,所有任务现在在失败前重试 5 次。但所有这些都在 180 秒后重试。 我想要某种方式让所有任务都遵循retry_backoff,而不必为每个任务指定它,以便我可以随时在一个地方更改它。

【问题讨论】:

    标签: celery django-celery celery-task


    【解决方案1】:

    根据Celery documentation看来你要设置的属性是retry_backoff_max

    Task.retry_backoff_max

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

    retry_backoff 可以是数字或布尔值,基于它的退避将表现不同。对于指数退避,您似乎希望将其设置为 true。

    Task.retry_backoff

    布尔值或数字。如果此选项设置为 诚然,自动重试将按照指数规则延迟 退避。第一次重试会有1秒的延迟,第二次 重试会延迟2秒,第三次会延迟4秒, 第四个将延迟 8 秒,以此类推。 (但是,这个延迟值 如果启用,则由 retry_jitter 修改。)如果设置了此选项 对于一个数字,它被用作延迟因子。例如,如果此选项 设置为3,第一次重试会延迟3秒,第二次会 延迟 6 秒,第三个会延迟 12 秒,第四个会 延迟 24 秒,以此类推。默认情况下,此选项设置为 False, 并且自动重试不会延迟。

    【讨论】:

    • retry_backoff 可以是布尔值或数字,甚至在引用的文档中也是如此。
    • 哈,你是对的@guival,我会改写这个。但是,除了措辞不佳的回应之外,我相信引用的文档仍然提供了原因和解决方案。
    【解决方案2】:

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

    【讨论】:

    • 感谢您的回答。所以没有办法在 celery 配置中设置这个。
    • 我不这么认为,但不要想当然,我还在学习Celery...
    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    相关资源
    最近更新 更多