采用Psyco实现python执行速度提高到与编译语言一样的水平,psycopython


本文实例讲述了采用Psyco实现python执行速度提高到与编译语言一样的水平的方法,分享给大家供大家参考。具体实现方法如下:

一、安装Psyco很简单,它有两种安装方式,一种是源码方式,一种是二进制码方式:

如果用源码方式安装,你需在源码的目录中调用python setup.py install命令编译生成psyco子目录,再把该子目录整个拷贝到python的site-packages目录下。

如果用二进制码方式安装,按这个网址列表中的python与psyco版本对应表下载合适的二进制文件,解压后会生成一个psyco-1.x的目录,把该目录下的psyco目录整个拷贝到python的site-packages目录下即可。

二、使用说明,在需要做效率优化的源文件前面加入以下两句:

复制代码 代码如下:
import psyco
psyco.full()

另外,使用psyco.profile()可以对大程序进行适当分析,以确定哪些函数最值得编译。
psyco.log()函数用来记录profile()得到的信息,下次就可以运行就能更快一点。
psyco.bind(myfunc)指定对函数myfunc进行编译,可以做到比full()更精细的控制。
psyco.proxy(f)创建一个新的函数,它的代码是由f编译得到二进制码

三、例子:
psyco_test.py文件代码如下:

复制代码 代码如下:
#!/usr/bin/python
# Filename:psyco_test.py
 
import math, timeit, psyco
 
def TestA():
    res, loopcnt = 0.0, 100
    for i in range(loopcnt):
        for j in range(loopcnt):
            for k in range(loopcnt):
                res = res + math.sin(i + j + k)
 
if __name__ == '__main__':
    TestB = psyco.proxy(TestA)
    ta = timeit.Timer("TestA()", "from __main__ import TestA")
    tb = timeit.Timer("TestB()", "from __main__ import TestB")
    print ("TestA(): %.2fs" % (ta.timeit(10)))
    print ("TestB(): %.2fs" % (tb.timeit(10)))

运行结果如下:

复制代码 代码如下:
jobin@jobin-desktop:~/work/python/psyco$ python psyco_test.py
TestA(): 4.41s
TestB(): 1.63s

使用psyco处理过的函数执行速度快了4倍左右, 跟作者宣称的差不多。

希望本文所述对大家的Python程序设计有所帮助。


Ruby跟Python哪个执行速度更快?

嗯。有些人说ruby快些。只是开发快。有些人说python快些。ruby发展的晚些,在某些情况下的确比python快些。不过python底层本身就是C写的。它本身脚本的执行效率相当高。这些差距基本可以忽略不计。

所以一个程序的快慢首先取决于算法。本身的执行速度你可以测试一下,差别不大。ruby在某些领域里开发速度的确挺快的。比如著名的ruby on rail。还的ruby的一些测试工具。python有名的几个程序也多,虽然不是那么划时代的感觉。不过足够用。整体来讲python的使用者多些,支持库也多些。

python以前有一个psyco优化库,后来转化为pypy了。不过还是老版本的psyco好用些。加上那个后,python速度大大提高。再和ruby比,就不好说了。在特定领域,会优化明显。

当初选择ruby还是python方面,还是花了些心思调查的。最后觉着ruby有些“原始”,不够开放与灵活。

语言是一个载体,用来表达程序员的思想,这方面我感觉python更强些。表达能力强。更适合当时的我。所以最后选择了python。
 

脚本语言需要解释器才可以运行,为何可以用Python来写Pypy,而且效率比CPython更高?

但是C因为跟底层过于接近,所以实现JIT解释器有诸多限制。(比如Psyco到项目死亡为止都没能实现出64位的JIT解释器)Pypy则换了另外一种思路。它先实现了一个Python的子集(注意,不是完整的python),叫RPython。然后用RPython去实现了Python的JIT解释器。这个RPython本身,并不依赖运行时解释器,而是直接被翻译成C代码(实际上可以翻译成多种目标代码,如Java、C#等)再进行编译,本质上它是一种编译型语言。所以,用RPython写出来的程序,最终是会被编译成本地代码的,跟C写的没有本质区别。由于RPython作者强大的优化功力,RPython程序最终编译结果基本等同于C直接写的效率。用这种程序实现出来的JIT解释器,自然也不会慢。而JIT技术,又保证了运行在这个解释器上的Python程序的效率的提升。
 

评论关闭