为什么不总是将psyco用于Python代码?
psyco似乎在优化Python代码方面非常有帮助,并且它以一种非侵入性的方式来实现。
因此,人们不得不怀疑。假设您始终使用x86架构(这是当今大多数应用程序在其中运行的架构),为什么不总是将其psyco
用于所有Python代码呢?它有时会犯错误并破坏程序的正确性吗?在某些奇怪的情况下会增加运行时间吗?
您对此有任何负面经历吗?到目前为止,我最不利的经验是它使我的代码速度仅提高了15%。通常情况下会更好。
自然,使用psyco不能代替有效的算法和编码。但是,如果您能以两行(导入和调用psyco)为代价提高代码的性能,我就没有理由不这样做。
-
1)内存开销是主要开销,如其他答案所述。您还需要支付编译费用,如果您没有选择的话,这可能会让人望而却步。从用户参考:
对于中型或大型应用程序,编译所有内容通常是过大的。编译过多的缺点在于编译所花费的时间,以及此过程消耗的内存量。保持这种微妙的平衡。
2)Psyco编译实际上可能会损害性能。再次从用户指南中(“已知错误”部分):
还有一些性能错误:Psyco减慢了代码而不是加速了代码的情况。很难完整列出可能的原因,但以下是一些常见原因:
- 必须避免内置函数
map
和filter
功能,并用列表理解代替。例如,map(lambda x: x*x, lst)
应该用更具可读性但较新的语法代替[x*x for x in lst]
。
* 正则表达式的编译似乎没有从Psyco中受益。(由于它是C代码,因此正则表达式的执行不会受到影响。)请勿在此模块上启用Psyco;否则,请启用Psyco。如有必要,可以明确地将其禁用,例如通过调用psyco.cannotcompile(re.compile)
。
3)最后,在某些相对模糊的情况下,使用Psyco实际上会引入错误。其中一些列在这里。
- 必须避免内置函数