引擎,python27的性能下降

时间:2011-12-01 12:07:12

标签: python performance google-app-engine

我想在appengine上测试python27,所以我从python25迁移了我的应用程序。每个请求的性能都要慢2倍!然后我又回到了python25,性能再次像以前一样。这是一张图片:

enter image description here (毫秒/请求)(cgi处理程序python 27,然后是python25)

我的应用使用WerkzeugJinja2,并且使用了很多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和threadsafe:yes测试了python 2.7,但与python 2.7和cgi相比,性能提升了一点。

6 个答案:

答案 0 :(得分:17)

Somewhere on Usenet我从Google那里读到了这样一句话:“在某些情况下,Python 2.7运行时比Python 2.5运行时慢,而在其他情况下则更快。我们现在还没有公开原因。”似乎到目前为止没有人发现2.7比2.5更快的情况......

我读到了这个

  1. Google了解预先出现的问题。
  2. 他们不确定如何处理它。
  3. 我的分析表明python 2.7多线程应用程序花费了大约。他们35%的时间都在{method 'acquire' of 'thread.lock' objects} - 而且似乎是在谷歌的RPC代码中发生的。还有迹象表明导入存在严重的锁定问题。

    除非等待AppEngine修复它,否则基本上你无能为力。另请参阅this comprehensive documentation有关减速的信息。

    几乎肯定不会在这方面发挥重要作用的因素是:

    • 上传pyc文件(GAE基础设施为您做到这一点)
    • 服务器配置(GAE规模如此之大,甚至在封闭式测试版2.7中也很慢)。
    • WSGI与CGI(不会解释如此巨大的性能影响)

    丑陋的是,谷歌在两个步骤中进行了大规模的价格上涨,但告诉我们“通过使用多线程python 2.7,你可以运行更有效,新价格看起来不那么糟糕”。不幸的是Python 2.7。运行时仍然标记为“实验性”,并且不提供生产质量性能。

答案 1 :(得分:5)

Python 2.7支持仍然是实验性的。新的和实验性的一个方面是它没有Python 2.5具有的那种性能烘焙和调整。

答案 2 :(得分:3)

在python 2.7上运行时,您是否将应用程序迁移到使用WSGI而不是CGI?

CGI接口可能只是现在为2.7启用的WSGI的包装。

答案 3 :(得分:1)

通过切换到python2.7,我的应用程序在负载下的性能差了3倍。

用2.5:

连接时间(毫秒)               最小平均值[+/- sd]中位数最大值 连接:36 48 15.4 41 109 处理:685 3010 1893.3 2657 9255 等待:685 3009 1893.3 2656 9255 总计:725 3058 1900.5 2711 9333

在特定时间内(ms)提供的请求的百分比   50%2711   66%3287   75%3896   80%4521   90%6146   95%7078   98%7934   99%8413  100%9333(最长要求)

用2.7:

连接时间(毫秒)               最小平均值[+/- sd]中位数最大值 连接:35 46 11.4 41 96 处理:1076 7614 4190.5 6711 32284 等待:1075 7614 4190.5 6711 32283 总计:1124 7660 4195.5 6764 32353

在特定时间内(ms)提供的请求的百分比   50%6764   66%7790   75%8751   80%9392   90%10844   95%13139   98%25219   99%27259  100%32353(最长要求)

答案 4 :(得分:0)

谷歌本身的一句话

  

实验!

     

Python 2.7运行时是一个实验性的,创新的,   并迅速改变App Engine的新功能。不幸的是,存在   在前沿意味着我们可能会向后兼容   变化。一旦Python 2.7运行时,我们将通知社区   不再是实验性的。

它们还没有真正用于生产用途,它就像beta测试一样。

因此,请将您的应用程序保存在python2.7中,直到实验阶段结束。

您也可以尝试仅上传已编译的.pyc文件,因为python27运行时支持bytecode upload

答案 5 :(得分:-1)

据我所知,Python 2.7应该比2.5快。但是,有一些因素会影响速度:

  • 编译二进制文件的方式;
  • 您的库(例如Memcache)是编译为C(++)还是Python。当然,C ++模块比Python等价物更快;
  • 它所使用的服务器 - 我还没有使用App Engine,但我认为服务器只能运行Python 2.5或Python 2.7,因为混合它们会浪费资源。如果2.7服务器的使用量远远超过2.5台服务器而且App Engine没有对此进行补偿,那么您也会注意到性能也会下降。

这是我提出的前三件事,但有很多因素。即使天气理论上 也会影响性能。