当前位置:  开发笔记 > 编程语言 > 正文

为什么不总是将psyco用于Python代码?

如何解决《为什么不总是将psyco用于Python代码?》经验,为你挑选了3个好方法。

psyco似乎在优化Python代码方面非常有用,它以非侵入性的方式实现.

因此,人们不得不怀疑.假设你总是在x86架构上(这是大多数应用程序运行的地方),为什么不总是使用psyco所有Python代码呢?它有时会出错并破坏程序的正确性吗?增加一些奇怪案例的运行时间?

你有任何负面经历吗?到目前为止,我最负面的经验是它使我的代码速度提高了15%.通常它会更好.

当然,使用psyco并不能替代有效的算法和编码.但是,如果您可以通过两行(导入和调用psyco)的成本来提高代码的性能,我认为没有充分的理由不这样做.



1> ire_and_curs..:

1)内存开销是主要的,如其他答案中所述.您还需要支付编译成本,如果您没有选择性,这可能会令人望而却步.从用户参考:

对于中型或大型应用程序来说,编译所有内容通常都是过度的.编译过多的缺点在于编译时间,以及此进程消耗的内存量.保持这是一个微妙的平衡.

2)Psyco编译实际上会损害性能.再次从用户指南("已知错误"部分):

还存在性能错误:Psyco减慢代码而不是加速代码的情况.很难列出可能的原因,但这里有一些常见的原因:

必须避免使用内置函数mapfilter函数,并将其替换为列表解析.例如,map(lambda x: x*x, lst)应该用更可读但更新的语法替换[x*x for x in lst].

正则表达式的编译似乎没有从Psyco中受益.(正则表达式的执行不受影响,因为它是C代码.)不要在此模块上启用Psyco; 如有必要,请明确禁用它,例如通过调用psyco.cannotcompile(re.compile).

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



2> HUAGHAGUAH..:

Psyco目前使用大量内存.它现在只在兼容Intel 386的处理器(在任何操作系统下)上运行.与Python的工作方式有一些微妙的语义差异(即错误); 它们在大多数程序中都不应该显而易见.

另见警告部分.举一个简单的例子,我注意到我的网络应用程序使用Cheetah生成的模板和DB I/O没有获得明显的加速.



3> Devin Jeanpi..:

当使用pyglet时,我发现我无法在整个应用程序上使用psyco而不会使我的应用程序无法正常运行.当然,我可以在数学繁重的代码的小部分中使用它,但它没有必要,所以我没有打扰.

另外,psyco用我的分析结果做了一些奇怪的事情(例如,好吧,根本不是从非psyco版本改变它们).我怀疑它与分析代码不一致.

我只是不真正使用它,除非我真的想要速度,这不是经常.我的优先事项是算法优化,这通常会带来更好的加速.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有