2

バックエンドインスタンスでアプリを実行しています。11のタスクがあります。最初のタスクは/_ah/ startによって開始され、次に、残りの10個のワーカータスクが開始されます。ワーカータスクの構造は次のとおりです。

done = False
while not done:
    do_important_stuff()
    time.sleep (30)
    if a_long_time_has_passed():
        done = True

AppEngineでの実行動作は毎回同じです。スケジューリングタスクが実行され、10人のワーカータスクがキューに入れられます。最初の7つのワーカータスクが実行を開始し、正しく実行されます。最後の3つはキューに入れられ、実行されることはありません。タスクキューアプリコンソールには、キュー内の10個のタスクすべてが表示され、そのうち7個が実行されています。

また、アプリはHTTPリクエストへの応答を停止し、httpハンドラーが呼び出されていることを示さないログを含む503ステータスコードを返します。

ワーカータスクキューは、最大レート1/sおよび2バケットで構成されます。管理コンソールが強制レートが0.1秒であることを示しているのは不思議です。タスクは永久に実行されるため、失敗した完了ステータスコードを返すことはありません。また、CPUの負荷はごくわずかです。ワーカーは主にURLフェッチを実行してから、30秒待ってから再度実行します。

ログは役に立ちません。私はそれを理解するのに役立つ診断を見つけるためにどこに行くべきかわかりません。無料のアカウントでテストしています。一度に実行できるタスクは8つに制限されますか?ドキュメントにはそのようなものは何もありませんが、アイデアが不足しています。最終的には、さらに多くのタスクを並行して実行したいと思います。

あなたが私に与えることができるアドバイスをありがとう。

4

1 に答える 1

3

バックエンドインスタンスが処理する同時リクエストの数には制限があり、その制限に達しているようです。

代替案は次のとおりです。

  • バックエンドに対するものではなく、通常のタスクキューを使用する
  • バックエンドの複数のインスタンスを開始します
  • タスクキューに依存してスレッドを開始するのではなく、スレッドを使用して開始リクエストから自分でスレッドを開始します

タスクがCPUにバインドされている場合、5、2、または1つでさえも10個実行しても追加のメリットは得られないことに注意してください。

于 2012-05-11T03:53:04.030 に答える