2012-08-10 15 views
8

私は仕事を持っている:セロリの労働者が再試行を呼び出した後、タスクを再試行しません()

@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()メソッドが呼び出されると、条件文も例外もキャッチされずに、タスクは再試行されません。

[54909:2012-08-10 19:21 INFO/MainProcess]私はこのようなメッセージを取得する労働者の端末で

タスクは、[badb3131-8964-41b5-90a7-245a8131e68d]再試行をrequest_task :タスクを再試行できます。

何が問題なのですか?

更新:最後に、私はこの質問を解決せず、タスク内でループを使用しなければならなかったので、タスクは再試行されません。

+0

あなたはどちらのセロリバージョンを使用していますか? –

+0

@MauroRocco私はセロリ3.0.4を使用した時質問が尋ねられました。バージョン3.0.4と3.0.5のバグを扱ういくつかの機能がありましたが、それ以降のバージョンはうまく機能しました。 – user1039098

+0

それを聞いてうれしいです。自分で質問に答えて解決策をより良く説明できれば。 –

答えて

1

Celeryドキュメントでの再試行に関するセクションをお読みください。 http://celery.readthedocs.org/en/latest/userguide/tasks.html#retrying

再試行のように見えますが、再試行例外を発生させる必要があります。

raise request_task.retry() 

これは、あなたの仕事を飾った機能によって再試行が処理されるようです。

関連する問題