采用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 相关文章推荐
Python获取远程文件大小的函数代码分享
May 13 Python
python操作CouchDB的方法
Oct 08 Python
Python中的ceil()方法使用教程
May 14 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 Python
python实现K最近邻算法
Jan 29 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
Apr 27 Python
python3实现163邮箱SMTP发送邮件
May 22 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
python中bytes和str类型的区别
Oct 21 Python
Python文件操作基础流程解析
Mar 19 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
Jun 10 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统计文章排行示例
2014/03/04 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
javascript 拖动表格行实现代码
2011/05/05 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
jQuery动态创建元素以及追加节点的实现方法
2016/10/20 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
2019/11/06 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
Python之reload流程实例代码解析
2018/01/29 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
通过HTML5 Canvas API绘制弧线和圆形的教程
2016/03/14 HTML / CSS
英国计算机商店:Technextday
2019/12/28 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
解释一下Windows的消息机制
2014/01/30 面试题
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
环保建议书400字
2014/05/14 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
2016春节放假通知范文
2015/08/18 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL