12

私には仕事があります:

    @celery.task(name='request_task',default_retry_delay=2,acks_late=True)
    def request_task(data):
        try:
            if some_condition:
                request_task.retry()
        except Exception as e:
            request_task.retry()

私はmongodbブローカーとmongodb結果バックエンドを有効にしてセロリを使用しています。

タスクの retry() メソッドが呼び出された場合、条件ステートメントからでも、例外をキャッチした後でも、タスクは再試行されません。

ワーカーの端末で、次のようなメッセージが表示されます。

[2012-08-10 19:21:54,909: INFO/MainProcess] タスク request_task[badb3131-8964-41b5-90a7-245a8131e68d] 再試行: タスクを再試行できます

何が間違っている可能性がありますか?

更新:最後に、私はこの質問を解決せず、タスク内で while ループを使用する必要があったため、タスクが再試行されることはありません。

4

2 に答える 2

1

Celery docs の再試行に関するセクションを読む必要があります。 http://celery.readthedocs.org/en/latest/userguide/tasks.html#retrying

再試行するには、再試行例外を発生させる必要があるようです。

raise request_task.retry()

これにより、タスクを装飾した関数によって再試行が処理されるようです。

于 2014-07-02T22:17:36.323 に答える