2

我在 Appengine 上有一个应用程序,它基于来自 Google Drive SDK 示例的 Python 版本的 DrEdit。**

虽然我实际上还没有进行任何分析,但我注意到它似乎正在为处理的每个请求从头开始构建 Drive 服务和 User Info 服务。这似乎非常浪费,因为它涉及发出一个 http 请求,然后以相对复杂的方式解析返回的 JSON。

我检查了python 谷歌客户端库中的一般示例,看看它是否更有效地完成,但它看起来一样......

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 毫秒。因此,如果您想执行两项操作——一项用于 Drive,一项用于 UserInfo(它们是同步的)——每个请求浪费了大约 120-150 毫秒。似乎值得节省的金额。

以及如何在服务上异步使用 execute() 命令,这将允许驱动请求、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 回答