Python下使用Psyco模块优化运行速度


Posted in Python onApril 05, 2015

今天介绍下Psyco模块,Psyco模块可以使你的Python程序运行的像C语言一样快。
都说Python语言易用易学,但性能上跟一些编译语言(如C语言)比较要差不少,这里可以用C语言和Python语言各编写斐波纳契数列计算程序,并计算运行时间:

C语言程序

int fib(int n){

   if (n < 2)

     return n;

   else

     return fib(n - 1) + fib(n - 2);

}

 

int main() {

    fib(40);

    return 0;

}

Python写的
def fib(n):  

  if n < 2:  

     return n  

  else:  

     return fib(n - 1) + fib(n - 2)  

fib(40)

运行时间
$ time ./fib

3.099s

$ time python fib.py

16.655s

可以看到运行时间还是有点差距的,这里的差距大概是5倍左右,现在就介绍Psyco:

Psyco 是 Python 语言的一个扩展模块,可以即时对程序代码进行专业的算法优化,可以在一定程度上提高程序的执行速度,尤其是在程序中有大量循环操作时。最早被 Armin Rigo 开发,后来由 Christian Tismer 维护并继续完善。

Psyco 可以在 32位元 的 GNU/Linux、BSD、Mac OS X、Microsoft Windows 平台上运行。Psyco 使用 C语言 编写,只针对32位元平台进行了编码。目前开发工作已经停止,由 PyPy 所接替,同时 PyPy 也提供针对 64位元 系统的支持。Psyco 可以在 Python解释器 编译代码时自动优化,将其使用C实现,并针对循环操作进行一些特殊的优化。经过这些优化,程序的性能将会得到提升,在跨平台环境下尤为明显。

安装Psyco

sudo apt-get install python-psyco

或者到官网上下载安装包,使用easy install安装即可。

使用Psyco模块

import psyco

psyco.full()

 

def fib(n):

  if n < 2:

     return n

  else:

     return fib(n - 1) + fib(n - 2)

fib(40)

运行结果

$ time python fib.py  

3.190s

改善你的代码

现在将我大部分 Python 代码加上下列脚本来利用 Psyco 提升运行速度:

try:  

    import psyco  

    psyco.full()  

except ImportError:  

    pass # psyco not installed so continue as usual
Python 相关文章推荐
简单介绍Python中的RSS处理
Apr 13 Python
python中dir函数用法分析
Apr 17 Python
python 时间戳与格式化时间的转化实现代码
Mar 23 Python
详解python发送各类邮件的主要方法
Dec 22 Python
在Python中使用AOP实现Redis缓存示例
Jul 11 Python
获取Django项目的全部url方法详解
Oct 26 Python
Jupyter中直接显示Matplotlib的图形方法
May 24 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
python 使用装饰器并记录log的示例代码
Jul 12 Python
Python split() 函数拆分字符串将字符串转化为列的方法
Jul 16 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
May 15 Python
python openssl模块安装及用法
Dec 06 Python
Python中使用tarfile压缩、解压tar归档文件示例
Apr 05 #Python
低版本中Python除法运算小技巧
Apr 05 #Python
Python中使用PDB库调试程序
Apr 05 #Python
使用PDB模式调试Python程序介绍
Apr 05 #Python
python使用calendar输出指定年份全年日历的方法
Apr 04 #Python
python获取指定网页上所有超链接的方法
Apr 04 #Python
python中字典dict常用操作方法实例总结
Apr 04 #Python
You might like
php使用qr生成二维码的示例分享
2014/01/20 PHP
yii中widget的用法
2014/12/03 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
IE中的File域无法清空使用jQuery重设File域
2014/04/24 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
JavaScript简单下拉菜单实例代码
2015/09/07 Javascript
javascript实现计时器的简单方法
2016/02/21 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
JS实现图片手风琴效果
2020/04/17 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
python如何查看系统网络流量的信息
2016/09/12 Python
Unicode和Python的中文处理
2017/03/19 Python
python和shell获取文本内容的方法
2018/06/05 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
2018/09/17 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
python利用opencv保存、播放视频
2020/11/02 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
管理提升方案
2014/06/04 职场文书
2014年城市管理工作总结
2014/12/02 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android