私のアプリは、リクエストごとに多くのデータストア操作を行う必要があります。より良い応答時間を得るために、それらを並行して実行したいと思います。
データストアの更新については、バッチ プットを行っているため、それらはすべて非同期で行われるため、ミリ秒単位で節約できます。App Engine では、最大 500 のエンティティを並行して更新できます。
しかし、さまざまな種類のデータストア フェッチを並行して実行できるようにする組み込み関数は見つかりませんでした。
App Engine では urlfetch 呼び出しを非同期で実行できるため、クエリ結果を JSON 形式のテキストとして返すゲッター URL を種類ごとに作成しました。これで、アプリはこれらの URL に対して非同期の urlfetch 呼び出しを実行できるようになり、データストアのフェッチを並列化できるようになりました。
この手法は、少数の並列リクエストではうまく機能しますが、これらの urlfetch 呼び出しを同時に 5 つまたは 10 を超えて実行しようとすると、App Engine はエラーをスローします。
私は今テストしているだけなので、各 urlfetch は同一のクエリです。それらは少量では問題なく動作しますが、同時リクエストが多数になると失敗し始めるため、非同期の urlfetch 呼び出しと関係があるに違いないと考えています。
私の質問は次のとおりです。
- 非同期で実行できる urlfetch.create_rpc() 呼び出しの数に制限はありますか?
- 同期 urlfecth.fetch() 関数には、失敗する前に関数が応答を最大 10 秒待機できるようにする「deadline」パラメーターがあります。urlfetch.create_rpc() に応答を待つ時間を伝える方法はありますか?
- 以下に示すエラーは何を意味しますか?
さまざまな種類のデータストア フェッチを並行して実行するための、より優れたサーバー側の手法はありますか?
ファイル "/base/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py" の 501 行目、get_result で self.__get_result_hook(self) を返す ファイル "/base/python_lib/versions/1/google/appengine/api" /urlfetch.py"、331 行目、_get_fetch_result raise DownloadError(str(err)) InterruptedError: ('Wait() 要求は、別のコールバックからの例外によって中断されました:'、DownloadError('ApplicationError: 5 ',))