采用Psyco实现python执行速度提高到与编译语言一样的水平,psycopython
采用Psyco实现python执行速度提高到与编译语言一样的水平,psycopython
本文实例讲述了采用Psyco实现python执行速度提高到与编译语言一样的水平的方法,分享给大家供大家参考。具体实现方法如下:
一、安装Psyco很简单,它有两种安装方式,一种是源码方式,一种是二进制码方式:
如果用源码方式安装,你需在源码的目录中调用python setup.py install命令编译生成psyco子目录,再把该子目录整个拷贝到python的site-packages目录下。
如果用二进制码方式安装,按这个网址列表中的python与psyco版本对应表下载合适的二进制文件,解压后会生成一个psyco-1.x的目录,把该目录下的psyco目录整个拷贝到python的site-packages目录下即可。
二、使用说明,在需要做效率优化的源文件前面加入以下两句:
psyco.full()
另外,使用psyco.profile()可以对大程序进行适当分析,以确定哪些函数最值得编译。
psyco.log()函数用来记录profile()得到的信息,下次就可以运行就能更快一点。
psyco.bind(myfunc)指定对函数myfunc进行编译,可以做到比full()更精细的控制。
psyco.proxy(f)创建一个新的函数,它的代码是由f编译得到二进制码
三、例子:
psyco_test.py文件代码如下:
# 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)))
运行结果如下:
TestA(): 4.41s
TestB(): 1.63s
使用psyco处理过的函数执行速度快了4倍左右, 跟作者宣称的差不多。
希望本文所述对大家的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。
但是C因为跟底层过于接近,所以实现JIT解释器有诸多限制。(比如Psyco到项目死亡为止都没能实现出64位的JIT解释器)Pypy则换了另外一种思路。它先实现了一个Python的子集(注意,不是完整的python),叫RPython。然后用RPython去实现了Python的JIT解释器。这个RPython本身,并不依赖运行时解释器,而是直接被翻译成C代码(实际上可以翻译成多种目标代码,如Java、C#等)再进行编译,本质上它是一种编译型语言。所以,用RPython写出来的程序,最终是会被编译成本地代码的,跟C写的没有本质区别。由于RPython作者强大的优化功力,RPython程序最终编译结果基本等同于C直接写的效率。用这种程序实现出来的JIT解释器,自然也不会慢。而JIT技术,又保证了运行在这个解释器上的Python程序的效率的提升。
相关内容
- Python之PyUnit单元测试实例,pythonpyunit
- python多重继承实例,python实例
- python中__call__方法示例分析,python__call_
- 跟老齐学Python之大话题小函数(1),齐学python
- 跟老齐学Python之大话题小函数(2),齐学python
- 跟老齐学Python之重回函数,齐学python之重
- python中元类用法实例,python元类实例
- python类继承用法实例分析,python用法实例分析
- python基于queue和threading实现多线程下载实例,queuethrea
- python操作CouchDB的方法,python操作couchdb
评论关闭