0

我的程序在一个循环中获取约 100 个条目。使用 get_by_key_name() 获取所有条目。Appstats 显示一些 get_by_key_name() 请求花费了 750 毫秒!(其他较大的值为 355ms、260ms、230ms)。其他提取的平均值从 30 毫秒到 100 毫秒不等。这些时间是实时的,因此有助于“ms”而不是“cpu_ms”。

由于上述原因,返回网页所需的总时间非常高 ms=5754,其中 cpu_ms=1472。(对于背靠背的请求,上述时间反复出现。)

环境: Python 2.7,webapp2,jinja2,高复制,没有其他并发请求到服务器,前端实例类是 F1,还没有设置内存缓存,最大空闲实例是自动的,最小挂起延迟是自动的,使用 db(不是 NDB)。

任何帮助都将不胜感激,因为我将整个数据库设计基于仅使用 get_by_key_name() 从数据存储中获取条目!

更新: 我尝试在每次 get_by_key_name() 方法调用之前和之后立即使用 time.clock()进行分析。我每次调用从 time.clock() 得到的差异是 10 毫秒!(只是想澄清一下 get_by_key_name() 是在不同的种类上调用的)。

根据 time.clock(),总执行时间(以挂钟时间计)为 660 毫秒。但实时为 5754 (=ms),每个 GAE 日志的 cpu_ms 为 1472。

问题总结:

  1. *[更新:已通过传递键列表解决此问题] 为什么 get_by_key_name() 需要这么长时间?*

  2. 为什么 5754 的 ms 比 1472 的 cpu_ms 多得多。由于实时(挂钟)花费的时间太长,任务执行是否在 75%(1-1472/5754)的时间内处于暂停/等待状态就最终用户而言?

  3. 如果上述情况属实,那么为什么 time.clock() 显示从第一个 get_by_key_name() 请求开始到最后一个(〜第 100 个)get_by_key_name() 请求之间只经过了 660 毫秒(挂钟时间);虽然 GAE 这次显示为 5754ms?

4

0 回答 0