我想在appengine上测试python27,所以我从python25迁移了我的应用程序.每个请求的性能都要慢2倍!然后我又回到了python25,性能再次像以前一样.这是一张图片:
(毫秒/请求)(cgi处理程序python 27,然后是python25)
我的应用程序使用Werkzeug,Jinja2,并且使用了很多memcache.什么原因会导致性能急剧下降?或者仅仅是因为appengine上的python2.7还处于测试阶段?
关于申请的一些细节:
这是一个非常简单的网上商店.有一些延迟的任务与pdf生成,但这些不会影响整体图形,因为首页获得最多的命中.几乎所有内容都是memcached.使用python 2.5加载页面时,空缓存需要约0.8秒.非缓存页面加载时间很长,主要是因为有很多数据库查询.缓存页面加载时间为60~100 ms.平均加载时间约为150毫秒.用python 2.7表现很糟糕.非缓存页面需要2秒以上才能加载.缓存页面加载时间超过200毫秒.
不幸的是我没有任何分析数据,我无法分辨python 2.7中究竟是什么减慢了.
我的页面加载时间数据是从实时页面收集的,该页面提供~10 req/sec和1个常驻python25实例,可以轻松处理此负载.
我还用wsgi测试了python 2.7 threadsafe:yes
,但与python 2.7和cgi相比,性能提升了一点点.
在Usenet的某个地方,我从Google那里读到了这样一句话:"在某些情况下,Python 2.7运行时比Python 2.5运行时慢,而在其他情况下则更快.我们现在还没有公开原因." 似乎到目前为止没有人发现2.7比2.5更快的情况因此......
我读到了这个
谷歌知道一个预先形成的问题.
他们不确定如何处理它.
我的分析表明python 2.7多线程应用程序花费大约.他们35%的时间都在{method 'acquire' of 'thread.lock' objects}
- 而且似乎发生在谷歌的RPC代码中.还有迹象表明导入存在严重的锁定问题.
除了等待AppEngine修复它之外,基本上你无能为力.另请参阅有关减速的综合文档.
几乎肯定不会在这方面发挥重要作用的因素是:
上传pyc文件(GAE基础设施为您做到这一点)
服务器配置(GAE规模如此之大,甚至在封闭式测试版2.7中也很慢)
WSGI与CGI(不会解释如此巨大的性能影响)
丑陋的是,谷歌在两个步骤中进行了大规模的价格上涨,但告诉我们"通过使用多线程python 2.7,你可以运行更有效,新价格看起来不那么糟糕".不幸的是Python 2.7.运行时仍然标记为"实验性",并且不提供生产质量性能.
Python 2.7支持仍然是实验性的.新的和实验性的一个方面是它没有Python 2.5具有的那种性能烘焙和调整.