psyco似乎对优化Python代码很有帮助,而且它是以一种非常非侵入性的方式完成的。
因此,人们不得不怀疑。假设您一直使用x86架构(这是目前大多数应用程序运行的架构),为什么不对所有Python代码都使用psyco呢?它有时会出错并破坏程序的正确性吗?增加了一些奇怪情况的运行时间?
你对它有什么负面的经验吗?到目前为止,我最负面的经验是它只让我的代码快了15%。通常这样会更好。
当然,使用coding并不能替代高效的算法和编码。但是,如果您可以用两行代码(导入和调用psyco)来提高代码的性能,我看不出有什么好的理由不这样做。
发布于 2009-09-17 10:23:31
1)内存开销是主要原因,如其他答案所述。您还需要支付编译成本,如果您没有选择性,这可能是令人望而却步的。从user reference
对于中型或大型应用程序来说,
编译所有内容通常是大材小用。编译过多的缺点在于编译所花费的时间,以及这个过程消耗的内存量。这是一个需要保持的微妙平衡。
2)性能实际上可能会受到actually编译的影响。同样来自用户指南("known bugs"部分):
也有性能错误:在这种情况下,instead会放慢代码的速度,而不是加速代码。很难完整列出可能的原因,但这里有几个常见的原因:
map和filter函数,并将其替换为列表理解。例如,map(lambda x: x*x, lst)应该被更具可读性但更新的语法所取代。[x*x for x in lst].map(lambda x: x*x, lst)中受益。(正则表达式的执行不受影响,因为它是C代码。)不要在此模块上启用Psyco;如果需要,请显式禁用它,例如,通过调用psyco.cannotcompile(re.compile).3)最后,在一些相对模糊的情况下,使用Finally实际上会引入bug。其中一些是listed here。
发布于 2009-02-22 18:45:14
目前使用了大量的内存。它现在只能在Intel 386兼容的处理器上运行(在任何操作系统下)。Python的工作方式有一些细微的语义差异(即错误);它们在大多数程序中不应该很明显。
另请参阅caveats section。举一个很难的例子,我注意到我的web应用程序使用猎豹生成的模板和DB I/O并没有获得明显的加速。
发布于 2009-02-22 18:26:25
在使用pyglet时,我发现如果不让我的应用程序不起作用,我就无法在整个应用程序上使用entire。当然,我可以在数学繁重的小段代码中使用它,但这不是必需的,所以我没有麻烦。
此外,my对我的分析结果做了一些奇怪的事情(例如,好吧,根本不会改变它们,而不是使用非my版本)。我怀疑它不能很好地处理分析代码。
我只是不会真的使用它,除非我真的想要速度,这并不是所有的经常。我的首要任务是算法优化,这通常会带来更好的加速效果。
https://stackoverflow.com/questions/575385
复制相似问题