【问题标题】:How do I retry Celery task until certain time?如何在特定时间之前重试 Celery 任务?
【发布时间】:2012-10-26 09:39:53
【问题描述】:

我阅读了docs on Celery tasks 并且无法理解我是如何做我需要的。

我想开始一个任务,每 1 秒运行一次并重试一次。 3 秒后它应该停止重试并返回一个默认值。

这是一个无法按预期工作的 POC 代码:

@task(expires=3, default_retry_delay=1, max_retries=10)
def ttt(args):
    try:
        return slow_work_result(args)
    except SlowWorkFailed:
        pass

    try:
        return ttt.retry(countdown=1)
    except MaxRetriesExceededError:
        return False


ttt.apply_async(args=(1,)).get()

任务应在 3 秒后到期,但 MaxRetriesExceededError 应在 10 秒内引发。但是当我运行它时,它会因为MaxRetriesExceededError 而停止。

我做错了什么?

这个 try-except 构造可以更优雅吗?

【问题讨论】:

  • expire 目前没有转移到重试的任务,我相信有一个问题悬而未决

标签: python django celery amqp


【解决方案1】:

我写了一个任务装饰来重试任务,也许可以解决你的问题。

https://gist.github.com/3958777

【讨论】:

    最近更新 更多