1

我阅读了有关 Celery 任务的文档,但不明白我是如何做我需要的。

我想开始一项任务,每 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 构造可以更优雅吗?

4

1 回答 1

1

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

https://gist.github.com/3958777

于 2012-10-26T13:31:13.160 回答