我在GAE上使用python27,我希望减少应用的响应时间。
根据cProfile,运行1.6M函数调用需要40s(显然太长)(看起来非常高)。我现在能找到的唯一线索就是“{thread'lock'获取''thread.lock'对象}”需要40个中的20个。 (注意:在app.yaml中将threadsafe设置为false或true似乎没有太大影响。)
关于我出错的地方或接下来要去哪里调查的任何想法?我知道获取锁定所花费的大量时间可能只是症状而不是原因,但如果是这种情况,我怎样才能找到根本原因?在cProfile中为我的函数列出的所有其他时间和ncalls似乎都是合理的。
我也想知道这是否是由于GAE在2011年底的性能问题引起的:
作为参考,这是一个示例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]
提前感谢您提供的任何帮助!
答案 0 :(得分:2)
如果您的应用程序非常重RPC(长时间调用datastore / urlfetch / etc),那么您会注意到在thread.lock.acquire()中等待了很多时间。
您可能希望在应用中启用AppStats,并查看每个rpc需要多长时间。