获取Thread.Lock在运行Python 2.7的Google App Engine中占用50%的响应时间

时间:2012-04-22 18:04:53

标签: python multithreading performance google-app-engine python-2.7

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

根据cPro​​file,运行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]

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

1 个答案:

答案 0 :(得分:2)

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

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