11

Python GAE アプリがあります。

タスクの実行を停止するか、失敗した場合に 1 回だけ再試行します。今のところ、私の yaml ファイルが何を言っているかにかかわらず、それらは永久に実行されます!

queue.yaml エントリは次のとおりです。

 - name: globalPurchase
   rate: 10/s
   bucket_size: 100
   retry_parameters:
     task_retry_limit: 1

globalPurchase タスクがエラー コード 500 で失敗した場合、ログに次のメッセージが記録されて成功するまで再試行されます。

「キュー "globalPurchase" の "task14" という名前のタスクがコード 500 で失敗しました。30 秒後に再試行します」

task_retry_limit が実際に使用されていないのはなぜですか?

4

3 に答える 3

7

私も同じ問題を抱えていました。この分野のドキュメントとツールは不足していますが、私が見つけたものは次のとおりです。

  • 再試行パラメーターは、開発サーバーでは効果がありません。さまざまな組み合わせを試しましたが、常に 30 秒間隔で無期限に再試行されました。本番サーバーにデプロイすると、パラメーターが有効になりました。
  • すべての再試行を無効にする方法が見つかりませんでした (ハンドラーが例外をスローしないようにする以外に)。
    • の場合task_retry_limit=0、再試行します。
    • task_retry_limit=0andが設定されている場合task_age_limit、queue.yaml はtask_retry_limit肯定的なメッセージで拒否されます。
    • 同様に、次の場合に文句を言いますtask_age_limit=0
    • task_retry_limit=1and task_age_limit=1s(明らかに最小値)を設定した場合でも、1 回の再試行が行われます。
  • 最小再試行時間は 20 秒です。構成で指定された遅延が 20 未満の場合、20 秒待機します。
  • 最初の再試行までの時間は予測できません。ランダムに最大 1 分遅れているようです。その後、再試行は構成されたスケジュールに従います。
于 2011-06-19T04:27:36.070 に答える
5

同じ問題がありましたが、不思議なことに、数時間そのままにしておくと正常に動作し始めたようです... GAEの更新には時間がかかるのではないでしょうか?

とにかく、私のために働いた設定は次のとおりです。

# configure the default queue
- name: default
  rate: 1/s
  retry_parameters:
    # task will stop retrying ONLY when BOTH LIMITS ARE REACHED
    task_retry_limit: 1
    task_age_limit: 1s
于 2011-07-21T06:50:50.073 に答える
2

task_retry_limit再試行をまったく望まない場合は、ゼロに設定する必要があります。これを。と組み合わせて使用​​する必要がありますtask_age_limittask_try_limitappengineタスクキューの再試行ロジックは、との組み合わせを使用して、再task_age_limit試行を停止するタイミングを決定します。

于 2011-04-06T21:10:36.257 に答える