【问题标题】:Default celery countdown默认芹菜倒计时
【发布时间】:2017-12-16 07:57:19
【问题描述】:

有没有办法像CELERYD_TASK_SOFT_TIME_LIMIT一样在django的settings.py中声明一个默认的倒计时?如果在我的基于类的定期任务中声明它而不是总是声明它会很有帮助?

try:
    ddd
except Exception as exc:
    raise self.retry(exc=exc)

还可以为所有任务设置类似的默认retry=True 集吗?

【问题讨论】:

    标签: python django celery celery-task


    【解决方案1】:

    看起来你可以这样做:

    app.config_from_object('django.conf:settings', namespace='CELERY')
    

    在 django.conf 中

    CELERY_SOFT_TIME_LIMIT = 120
    CELERY_TIME_LIMIT = 240
    

    这里是 celery django 配置文档。

    http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

    这是一个配置选项列表。

    http://docs.celeryproject.org/en/latest/userguide/configuration.html

    我无法找到全局任务重试设置,但我可以发誓我在某处看到它。 但是,您可以在每个任务级别上设置重试次数,也可以通过硬时间限制和软时间限制。

    @app.task(max_retries=10, time_limit=240, soft_time_limit=120)
    def task(self, auth, message):
        #do_stuff
    

    这是您可以为 celery 装饰器提供的选项列表。 http://docs.celeryproject.org/en/latest/reference/celery.app.task.html#celery.app.task.Task.retry

    【讨论】:

    • 你没有真正回答这个问题。我想知道是否有可用的CELERY_RETRY_COUNTDOWN 配置
    • 你说得对,我很抱歉。我一直找不到那个选项。但是你可以将它添加到装饰器@app.task(bind=True, default_retry_delay=30)。我认为您也可以创建自己的 Celery Task Class 并将其设置在那里,然后让您的其他任务继承自该任务。如果你愿意,我可以提供一个例子。