采用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实现分页效果
Oct 25 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 Python
python 构造三维全零数组的方法
Nov 12 Python
Python函数装饰器原理与用法详解
Aug 16 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 Python
Python中url标签使用知识点总结
Jan 16 Python
Python求解排列中的逆序数个数实例
May 03 Python
Django用户登录与注册系统的实现示例
Jun 03 Python
详解Python 函数参数的拆解
Sep 02 Python
jupyter使用自动补全和切换默认浏览器的方法
Nov 18 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
Jan 08 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
模仿OSO的论坛(一)
2006/10/09 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
vue.js开发环境安装教程
2017/03/17 Javascript
JS实现加载时锁定HTML页面元素的方法
2017/06/24 Javascript
详解webpack和webpack-simple中如何引入css文件
2017/06/28 Javascript
vue的一个分页组件的示例代码
2017/12/25 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
教你学会使用Python正则表达式
2017/09/07 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
Django学习笔记之ORM基础教程
2018/03/27 Python
python学习之hook钩子的原理和使用
2018/10/25 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
手写一个python迭代器过程详解
2019/08/27 Python
Python imutils 填充图片周边为黑色的实现
2020/01/19 Python
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
幼儿园运动会入场词
2014/02/10 职场文书
相亲活动方案
2014/08/26 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
2016年公司新年寄语
2015/08/17 职场文书