首页 > 解决方案 > Django/Celery:max_retries 用于重试,但打印值始终是 Celery 默认值 (3)

问题描述

    @app.task(bind=True, autoretry_for=(Exception,), retry_kwargs={'max_retries': 10, 'countdown': 5})
    def job_deliver_message(self, message_id):
        print('Try {0}/{1}'.format(self.request.retries, self.max_retries))
        ...
        ...
        ...

为了测试,我故意导致此任务失败。它确实重试了 10 次!但是,打印输出如下:

[2020-06-03 19:14:06,700: WARNING/ForkPoolWorker-15] Try 0/3
[2020-06-03 19:14:12,080: WARNING/ForkPoolWorker-1] Try 1/3
[2020-06-03 19:14:17,553: WARNING/ForkPoolWorker-3] Try 2/3
[2020-06-03 19:14:23,000: WARNING/ForkPoolWorker-5] Try 3/3
[2020-06-03 19:14:28,489: WARNING/ForkPoolWorker-7] Try 4/3
[2020-06-03 19:14:33,603: WARNING/ForkPoolWorker-9] Try 5/3
[2020-06-03 19:14:39,038: WARNING/ForkPoolWorker-11] Try 6/3
[2020-06-03 19:14:44,525: WARNING/ForkPoolWorker-13] Try 7/3
[2020-06-03 19:14:49,688: WARNING/ForkPoolWorker-15] Try 8/3
[2020-06-03 19:14:54,985: WARNING/ForkPoolWorker-1] Try 9/3
[2020-06-03 19:14:54,985: WARNING/ForkPoolWorker-1] Try 10/3

我错过了什么?我是否max_retries从错误的地方打印价值?

是的:我确实知道我可以只显示“10”......因为我明确设置了它......但只是想知道为什么它给我 3 时给了 10 并且实际上对它采取了重新的数量尝试...

标签: celerydjango-celery

解决方案


您正在使用self.max_retries默认设置为 3。

retry 方法有另一个变量max_retries,在这种情况下设置为 10。

代码参考:task.py


推荐阅读