2

GoogleドライブSDKサンプルのPythonバージョンのDrEditに基づくAppengineのアプリがあります。**

実際にはまだプロファイリングを行っていませんが、処理されるすべてのリクエストに対して、ドライブサービスとユーザー情報サービスを最初から構築しているように見えることに気付きました。これは、httpリクエストを作成してから、返されたJSONを比較的複雑な方法で解析する必要があるため、非常に無駄に思えます。

Python googleクライアントライブラリの一般的な例をチェックして、より効率的に実行されているかどうかを確認しましたが、同じように見えます...

http = httplib2.Http()
http = credentials.authorize(http)
service = build('calendar', 'v3', http=http)

APIディスカバリーはユーザー固有であるため(これについてはどこにも言及されていません)、それとも許可されたhttpオブジェクトをサービスオブジェクトに取り込むための怠惰な方法ですか?私はPythonとGAEに慣れていないので、httpリクエストまたは生成されたオブジェクトのいずれかで発生しているある種の巧妙なキャッシュを見落としている可能性がありますが、両方ともありそうもないと思います。

質問: これは無駄だと思うのは正しいですか?もしそうなら、F1クラスのGAEサーバーでリクエストごとに無駄になる可能性のあるおおよそのミリ秒を誰かが知っていますか?また、ユーザー間でサービスを再利用できるようにする変更されたdiscovery.pyモジュールを知っている人はいますか。

**サンプルに妥当な数の変更を加えました。これには、Python 2.7への切り替えや、memcacheにのみ保存されている資格情報を使用したオンラインOAuth2の使用が含まれます。

編集: appstatsをインストールしました(恐れていたほど複雑ではありませんでした!)。問題のhttpリクエストには約60〜75ミリ秒かかるようです。したがって、2つ(1つはドライブ用、もう1つはUserInfo用)を実行したい場合(そしてそれらは同期している)、リクエストごとに約120〜150ミリ秒を浪費しています。節約する価値があると思われる金額。

また、サービスでexecute()コマンドを非同期的に使用すると、drive、userinfo、およびmemcache/datastoreへのリクエストを同時に実行できるようになります。(論理的には、少なくとも私のアプリでは可能です)。これには、discovery.pyの(別の)書き直しが必要ですか、それともそれを機能させるためのより簡単な方法がありますか?

4

1 に答える 1

2

はい、それは無駄です。ネットワークI/Oを大幅に削減するキャッシュをオンにしてみてください。

https://developers.google.com/api-client-library/python/guide/performance#cache

私の推測では、60〜75ミリ秒の時間を4倍または5倍短縮するでしょう。

于 2013-01-02T16:37:47.423 に答える