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

yipeiwu_com6年前Python基础

本文实例讲述了采用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程序设计有所帮助。

相关文章

django-allauth入门学习和使用详解

django-allauth是集成的Django应用程序,用于解决网站身份验证,用户的注册登录及账户管理,以及第三方(社交)账户的身份验证。 既然你知道并准备使用django-allau...

python pandas 组内排序、单组排序、标号的实例

python pandas 组内排序、单组排序、标号的实例

摘要:本文主要是讲解一下,如何进行排序。分为两种情况,不分组进行排序和组内进行排序。什么意思呢?具体来说,我举个栗子。 ****注意**** 如果只是单纯想对某一列进行排序,而不进行打序...

Python实现高斯函数的三维显示方法

Python实现高斯函数的三维显示方法

在网上查阅资料,发现很少用Python进行高斯函数的三维显示绘图的,原因可能是其图形显示太过怪异,没有MATLAB精细和直观。 回顾一下二维高斯公式: σ此处取3。 在MATLAB下的...

在python 中split()使用多符号分割的例子

调用re模块中的split()函数可以用多个符号进行分割 In [1]: import re In [2]: words = '我,来。上海?吃?上海菜' In [3]: wor...

wxPython窗口中文乱码解决方法

本文实例讲述了wxPython窗口中文乱码解决方法,分享给大家供大家参考。具体方法如下: 文件保存为 utf-8 文件开头添加 # -*- coding: utf-8 -*- 在有中文字...