我想在appengine上测试python27,所以我已经从python25迁移了我的应用。每个请求的性能降低了2倍以上!然后,我返回到python25,性能再次像以前一样。这是一张图片:
(毫秒/请求)(CGI处理程序python 27,然后python25)
我的应用程序使用Werkzeug,Jinja2,并且大量使用了内存缓存。是什么原因会导致性能急剧下降?还是仅因为appengine上的python2.7仍处于beta中?
有关应用程序的一些详细信息:
这是相当简单的网上商店。 pdf生成有一些延迟的任务,但是这些任务不会对整体图形产生太大影响,因为首页获得的点击率最高。几乎所有内容都被缓存。使用空的缓存最多需要0.8秒才能加载python 2.5的页面。非高速缓存的页面需要很长时间才能加载,这主要是因为有许多数据库查询。缓存的页面加载时间为60〜100毫秒。平均加载时间约为150毫秒。使用python 2.7的性能非常糟糕。未缓存的页面需要2秒钟以上的时间才能加载。缓存的页面加载时间超过200毫秒。
不幸的是,我没有任何分析数据,也无法确定python 2.7到底是什么使速度变慢。
我的页面加载时间数字是从服务于〜10 req/sec的实时页面中收集的,并且有1个驻留的python25实例可以轻松应对此负载。
我还使用wsgi和threadsafe:yes
测试了python 2.7,但与python 2.7和cgi相比,性能仅提高了一点。
最佳答案
Somewhere on Usenet我从Google读到了一条这样的声明:“Python 2.7运行时在某些情况下比Python 2.5运行时要慢,而在另一些情况下要快。在这一点上,我们尚未公开其原因。”到目前为止似乎没有人发现2.7比2.5快的场景...
我读到这个
我的分析表明python 2.7多线程应用程序花费了他们35%的时间用
{method 'acquire' of 'thread.lock' objects}
-貌似发生在Google的RPC代码中。也有迹象表明导入存在严重的锁定问题。基本上,除了等待AppEngine对其进行修复之外,您无能为力。另请参阅this comprehensive documentation有关减速的信息。
几乎可以肯定的是,在这些因素中不起作用的因素是:
丑陋的事情是Google分两步进行了大幅提价,但告诉我们“通过使用多线程python 2.7,您可以更有效地运行,以至于新价格看起来不会太糟糕”。不幸的是Python 2.7。运行时仍被标记为“实验性”,并且无法提供生产质量的性能。
关于python - Appengine,使用python27导致性能下降,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8341112/