非同期RPC

非同期リクエストをサポートするDatastoreを操作するための新しいクライアントライブラリの基礎を築きながら、今日使用できる低レベルの機能をいくつか追加しました。 非同期リクエストのサポートが文書化されている唯一のAPIはurlfetchです。 そして、この機能は非常に便利です。



リモートサービスから特定のデータを選択する必要があるとします。 サービスには2つのインスタンスがあり、どちらもわずかにロードされています。 私たちがやりたいことは、両方のサービスに同時にリクエストを送信し(これは簡単な部分です)、その後、どちらかからの結果を待ちます。



from google.appengine.api import urlfetch, apiproxy_stub_map urls = ['http://service1.com', 'http://service2.com'] # Etc. rpcs = [] for url in urls: rpc = urlfetch.create_rpc(deadline=1.0) urlfetch.make_fetch_call(rpc, url) rpcs.append(rpc) rpc = apiproxy_stub_map.UserRPC.wait_any(rpcs) # Now rpc is the first rpc that returned a result. Have at it!
      
      







以上です! この便利な機能について詳しく知りたい場合は、App Engine SDKのdocstringをご覧ください。



wait_any()を繰り返し呼び出して、次の応答を取得することもできます。 リストから満たされたリクエストを必ず削除してくださいwait_any()仕様は、リストを見ているかどうかに関係なく、リストから最初に完了したリクエストが返されることを示しています。



また、現時点では、他のリクエストをキャンセルする機能はありません。 問題は、他のリクエストを無視しても、App Engineランタイムはリクエストが完了するかタイムアウトするまで待機することです。



最後に、すべてのリクエストが完了することを期待する(何も返さない)同様のUserRPC.wait_all()メソッドがあります。



All Articles