ログに次の警告メッセージが表示された空白の画面が表示されます。
A problem was encountered with the process that handled this request,
causing it to exit. This is likely to cause a new process to be used for
the next request to your application. (Error code 204)
私には他に何も与えられていません。タスクレット (@ndb.tasklet)、非同期データストア ops、および非同期 urlfetches (検索エンジン) を多用しています。appstats によると、たとえば 15 分の処理時間を 15 秒に短縮しています。処理するデータが少ない場合は機能します。さらに処理すると、上記の警告で失敗します。インスタンス タブには、インスタンスが 1 つだけ表示されます。私の直感では、そのインスタンスを過負荷にしています。
余分な負荷をサポートするために追加のインスタンスが自動的に起動すると思いましたが、インスタンスは CPU / メモリの負荷ではなくリクエストにのみ応答するのでしょうか? 3 つの異なるページを起動すると、3 つの異なるインスタンスも起動します。問題は、各リクエストが多くの処理を必要とすることです。
タスク キューを使用してバックエンド インスタンスをターゲットにすることもできますが、タスクがいつ完了して結果を返すかを知る必要があります。残念ながら、タスク キューには、特定のタスクがいつ完了したかを監視する方法がありません。
インスタンス間で処理を明示的に分割するにはどうすればよいですか (また、そうすべきですか)? 別の解決策はありますか?204 エラー メッセージを回避するにはどうすればよいですか?
編集:再帰制限を次のように引き上げました:
sys.setrecursionlimit
これをコメントアウトすると、次のエラーが表示されます。
RuntimeError: maximum recursion depth exceeded