WEB开发网
开发学院软件开发Python 用Psyco让Python运行得像C一样快 阅读

用Psyco让Python运行得像C一样快

 2007-11-12 12:52:53 来源:WEB开发网   
核心提示: psyco.bind(somefunc)# or method, classnewname = psyco.proxy(func)第二种形式把 func 作为标准的 Python 函数,但是优化了涉及 newname 的调用,用Psyco让Python运行得像C一样快(5),除了测试和调试

psyco.bind(somefunc) # or method, class

newname = psyco.proxy(func)

第二种形式把 func 作为标准的 Python 函数,但是优化了涉及 newname 的调用。除了测试和调试之外的几乎所有的情况下,您都将使用 psyco.bind() 形式。

Psyco 的性能

尽管 Psyco 如此神奇,使用它仍然需要一点思考和测试。主要是要明白 Psyco 对于处理多次循环的块是很有用的,而且它知道如何优化涉及整数和浮点数的操作。对于非循环函数和其它类型对象的操作,Psyco 多半只会增加其分析和内部编译的开销。而且,对于含有大量函数和类的应用程序来说,在整个应用程序范围启用 Psyco,会在机器码编译和用于这一高速缓存的内存使用方面增加大量的负担。有选择性地绑定那些可以从 Psyco 的优化中获得最大收益的函数,这样会好得多。

我以十分幼稚的方式开始了我的测试过程。我仅仅考虑了我近来运行的、但还未考虑加速的应用程序。想到的第一个示例是用来将我即将出版的书稿(Text Processing in Python)转换成 LaTeX 格式的文本操作程序。该应用程序使用了一些字符串方法、一些正则表达式和一些主要由正则表达式和字符串匹配所驱动的程序逻辑。实际上将它用作 Psyco 的测试候选是很糟的选择,但是我还是使用了,就这么开始了。

第一遍测试中,我所做的就是将 psyco.jit() 添加到脚本顶端。这做起来一点都不费力。遗憾的是,结果(意料当中)很令人失望。原先脚本运行要花费 8.5 秒,经过 Psyco 的“加速”后它大概要运行 12 秒。真差劲!我猜测大概是即时编译所需的启动开销拖累了运行时间。因此接下来我试着处理一个更大的输入文件(由原来那个输入文件的多个副本组成)。这次获得了小小的成功,将运行时间从 120 秒左右减到了 110 秒。几次运行中的加速效果比较一致,但是效果都不显著。

上一页  1 2 3 4 5 6 7  下一页

Tags:Psyco Python 运行

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接