如何在特定时间之前重试Celery任务?

时间:2012-10-26 09:39:53

标签: python django celery amqp

我读了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结构可以更优雅吗?

1 个答案:

答案 0 :(得分:1)

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

https://gist.github.com/3958777