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


Posted in Python onOctober 11, 2014

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

Python 相关文章推荐
win7安装python生成随机数代码分享
Dec 27 Python
python计算牛顿迭代多项式实例分析
May 07 Python
使用Python写CUDA程序的方法
Mar 27 Python
恢复百度云盘本地误删的文件脚本(简单方法)
Oct 21 Python
Python实现针对给定单链表删除指定节点的方法
Apr 12 Python
详解python中的json和字典dict
Jun 22 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
python调用私有属性的方法总结
Jul 24 Python
python 实现超级玛丽游戏
Nov 25 Python
基于python实现监听Rabbitmq系统日志代码示例
Nov 28 Python
Python tkinter之ComboBox(下拉框)的使用简介
Feb 05 Python
跟老齐学Python之编写类之四再论继承
Oct 11 #Python
Python使用MySQLdb for Python操作数据库教程
Oct 11 #Python
跟老齐学Python之编写类之三子类
Oct 11 #Python
跟老齐学Python之编写类之二方法
Oct 11 #Python
Python中MYSQLdb出现乱码的解决方法
Oct 11 #Python
python操作mysql中文显示乱码的解决方法
Oct 11 #Python
wxPython窗口中文乱码解决方法
Oct 11 #Python
You might like
php下删除一篇文章生成的多个静态页面
2010/08/08 PHP
关于crontab的使用详解
2013/06/24 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
php判断linux下程序问题实例
2015/07/09 PHP
php查询及多条件查询
2017/02/26 PHP
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
js CSS操作方法集合
2008/10/31 Javascript
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
javascript的函数作用域
2014/11/12 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
jquery.multiselect多选下拉框实现代码
2016/11/11 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
荷兰最大的儿童服装店:The Kids Republic
2019/04/13 全球购物
"序列点" 是什么
2016/07/29 面试题
三八红旗手先进事迹材料
2014/05/13 职场文书
白血病募捐倡议书
2014/05/14 职场文书
企业愿景口号
2015/12/25 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python
Python标准库之typing的用法(类型标注)
2021/06/02 Python
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android