非同期 URL フェッチに関するGoogle App Engine のドキュメントを読む:
アプリは、最大 10 個の同時非同期 URL フェッチ呼び出しを持つことができます
アプリケーションが一度に 10 を超える非同期フェッチを呼び出すとどうなりますか?
Google App Engine は例外を発生させますか、それとも処理待ちの残りの呼び出しを単にキューに入れますか?
非同期 URL フェッチに関するGoogle App Engine のドキュメントを読む:
アプリは、最大 10 個の同時非同期 URL フェッチ呼び出しを持つことができます
アプリケーションが一度に 10 を超える非同期フェッチを呼び出すとどうなりますか?
Google App Engine は例外を発生させますか、それとも処理待ちの残りの呼び出しを単にキューに入れますか?
うーん、Swizzec は正しくありません。簡単にテストできます:
rpc = []
for i in range(1,20):
rpc.append(urlfetch.createrpc())
urlfetch.make_fetch_call(rpc[-1],"http://stackoverflow.com/questions/3639855/what-happens-if-i-call-more-than-10-asynchronous-url-fetch")
for r in rpc:
response = r.get_result().status_code
これは例外を返しません。実際、これは問題なく機能します。請求対象外のアプリケーションでは、結果が異なる場合があることに注意してください。
Swizec が報告しているのは、アプリケーションへの同時接続の最大数に関連する別の問題です。課金対象のアプリの場合、実質的な制限はありませんが、スケールアウトするだけです (1000ms ルールに従います)。
GAE は、リクエスト ハンドラがブロッキング URL フェッチを発行することを知る方法がないため、彼が見ている接続 500 は、彼のアプリが実際に行っていることとは関係ありません (平均リクエスト応答時間が 1000 ミリ秒を超える場合、これは単純化しすぎです)。 500 の可能性が増加します)。
500 エラーが発生し始めます。静かに。
これらについては、すべてのリクエストの下でログを調べたときにのみわかります (エラーとしてリストされないでください)。「同時リクエストの制限に達したため、リクエストは中止されました」と表示されます。
したがって、多くの非同期呼び出しを行っている場合は、そのうちのいくつかを処理できることを確認してください。
これがあなたの質問に答えているかどうかを確認してください:
http://groups.google.com/group/google-appengine/browse_thread/thread/1286139a70ef83c5?fwc=1