我在Appengine上有一个应用程序,它基于Google Drive SDK样本中的DrEdit的Python版本。**
虽然我还没有真正完成任何分析,但我注意到它似乎是为处理的每个请求从头开始构建Drive服务和用户信息服务。这似乎非常浪费,因为它涉及发出http请求,然后以相对复杂的方式解析返回的JSON。
我已经检查了python google client library中的一般示例,看看它是否更有效,但它看起来一样......
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-75ms。因此,如果你想做两个 - 一个用于Drive,一个用于UserInfo(并且它们是同步的) - 你每个请求浪费大约120-150ms。一笔似乎值得保存的金额。
然后在服务asynchronously上使用execute()命令,这将允许同时完成对drive,userinfo和memcache / datastore的请求。 (逻辑上,这至少可以在我的应用程序中使用)。这是否需要(另一个)重写discovery.py或是否有更简单的方法使其工作?
答案 0 :(得分:2)
是的,这很浪费。尝试转换缓存,这将显着减少网络I / O:
https://developers.google.com/api-client-library/python/guide/performance#cache
我的猜测是将60-75ms的时间缩短4或5倍。