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去掉字符串中空格的方法
Mar 11 Python
Python3基础之list列表实例解析
Aug 13 Python
Python通过递归遍历出集合中所有元素的方法
Feb 25 Python
对于Python的框架中一些会话程序的管理
Apr 20 Python
Python基于smtplib实现异步发送邮件服务
May 28 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
对python的bytes类型数据split分割切片方法
Dec 04 Python
python实现复制文件到指定目录
Oct 16 Python
Django 请求Request的具体使用方法
Nov 11 Python
基于Python检测动态物体颜色过程解析
Dec 04 Python
Python实现投影法分割图像示例(二)
Jan 17 Python
python opencv如何实现图片绘制
Jan 19 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
Look And Say 序列php实现代码
2011/05/22 PHP
解析PHP实现下载文件的两种方法
2013/07/05 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
让您的菜单不离网站
2006/10/03 Javascript
jQuery使用手册之一
2007/03/24 Javascript
在js(jquery)中获得文本框焦点和失去焦点的方法
2012/12/04 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
JavaScript+html5 canvas绘制缤纷多彩的三角形效果完整实例
2016/01/26 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
React中jquery引用的实现方法
2017/09/12 jQuery
Vue-Quill-Editor富文本编辑器的使用教程
2018/09/21 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
Python列表计数及插入实例
2014/12/17 Python
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
python比较两个列表大小的方法
2015/07/11 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
实践Vim配置python开发环境
2018/07/02 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
python打包多类型文件的操作方法
2020/09/21 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
文明美德伴我成长演讲稿
2014/05/12 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python