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 に答える