6

我在 GAE 上使用 python27 并希望减少应用程序的响应时间。

根据 cProfile 的说法,运行 160 万次函数调用需要 40 秒(显然太长)(似乎非常高)。我现在能找到的唯一线索是“{method 'acquire' of 'thread.lock' objects}”占用了 40 秒中的 20 秒。(注意:在 app.yaml 中将 threadsafe 设置为 false 或 true 似乎没有太大的影响。)

关于我哪里出错或下一步要调查哪里的任何想法?我知道获取锁所花费的大量时间可能只是症状而不是原因,但如果是这样的话,我怎样才能找到根本原因?在 cProfile 中为我的函数列出的所有其他时间和 ncall 似乎都是合理的。

我还想知道这是否是由于 2011 年底 GAE 与 2.7 的性能问题:

作为参考,这里是一个示例 cProfile 输出(删除了行):

Profile data:
1662549 function calls (1652247 primitive calls) in 39.545 seconds
Ordered by: cumulative time
ncalls  tottime  percall  cumtime  percall filename:lineno(function)
[lines removed]
10816   19.245    0.002   19.245    0.002 {method 'acquire' of 'thread.lock' objects}
[lines removed]

提前感谢您提供的任何帮助!

4

1 回答 1

2

如果您的应用程序非常繁重 RPC(对 datastore/urlfetch/etc 进行长时间调用),那么您会注意到在 thread.lock.acquire() 中等待大量时间。

您可能希望在您的应用程序中启用AppStats,并查看每个 rpc 需要多长时间。

于 2012-04-22T23:39:01.537 回答