为什么不总是使用Python代码的psyco?

psyco似乎对优化Python代码非常有帮助,而且它以一种非侵入性的方式进行。

因此,人们不得不怀疑。 假设你总是使用x86架构(这是大多数应用程序最近运行的地方),为什么不总是使用psyco来处理所有的Python代码呢? 它有时会犯错误,破坏程序的正确性吗? 增加运行时的一些奇怪的情况?

你有没有消极的经历呢? 到目前为止,我最负面的经验是它使我的代码更快了15%。 通常情况下会更好

当然,使用psyco并不能取代高效的algorithm和编码。 但是,如果你可以改善你的代码的性能两行(导入和调用psyco)的成本,我没有理由不要。

1)如其他答案所述,内存开销是主要的。 你也支付编辑成本,如果你不select,这可能是禁止的。 来自用户参考 :

编译所有内容对于大中型应用程序来说通常是过分的。 编译太多的缺点是编译时间加上这个进程消耗的内存量。 保持微妙的平衡。

2)Psyco汇编实际上可能会损害性能。 再次从用户指南( “已知的错误”部分):

还有一些性能问题:Psyco减慢代码而不是加速代码。 要列出可能的原因很难,但这里有一些常见的原因:

  • 必须避免内置的mapfilter函数,并用列表理解来代替。 例如, map(lambda x: x*x, lst)应该被更可读但更新近的语法[x*x for x in lst]所取代。
  • 正则expression式的汇编似乎没有从Psyco中受益。 (正则expression式的执行不受影响,因为它是C代码。)不要在此模块上启用Psyco; 如有必要,可以明确禁用它,例如调用psyco.cannotcompile(re.compile)

3)最后,有一些比较模糊的情况,使用Psyco实际上会引入错误。 其中一些在这里列出 。

Psyco目前使用了大量的内存。 它只能在兼容Intel 386的处理器(在任何操作系统下)运行。 Python的工作方式有一些细微的语义差异(即错误) 他们不应该在大多数节目中显而易见。

另请参阅警告部分 。 举一个简单的例子,我注意到我用Cheetah生成的模板和数据库I / O的web应用程序没有获得明显的提速。

当使用pyglet时,我发现我无法在整个应用程序中使用psyco而不会使我的应用程序无法正常工作。 当然,我可以在一小段math代码中使用它,但这并不是必要的,所以我没有打扰。

另外,psyco用我的分析结果做了一些奇怪的事情(比如,根本不会从非psyco版本中改变它们)。 我怀疑它与分析代码不好玩。

除非我真的需要这样的速度,否则我不会真的使用它,这并不是那么经常。 我的首要任务是algorithm优化,通常会导致更好的加速。

这也取决于你的瓶颈在哪里。 我主要做web应用程序,那里的瓶颈可能是更多的IO和数据库。 所以你应该知道在哪里优化。

另外要注意的是,也许你应该首先考虑一下你的代码,而不是直接把psyco放在它上面。 所以我同意德文的观点,algorithm优化应该是第一位的,他们可能会有不希望的副作用。

一个人不应该依靠一些神奇的子弹来解决你的问题。 使用psyco来更快速地制作一个缓慢的节目通常是没有必要的。 错误的algorithm可以重写, 需要速度的部分可以用另一种语言编写。 当然,你的问题是为什么我们不使用它来提高速度,而且在使用psyco的时候会有一些开销。 Psyco使用记忆,当你看着它们时,这两条线就像是开销一样。 至于我为什么不使用psyco的个人原因,这是因为它不支持x86_64,我认为这是x86架构的新兴架构(尤其是2038接近迟早)。 我的select是pypy,但我也不完全喜欢。

其他一些事情:

  1. 它似乎不是非常积极的维护。
  2. 它可以是一个记忆猪。

psyco死了,不再维护。 现在是时候find另一个

很简单:“因为代码已经足够快了”。