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实现线程池的方法
Jun 30 Python
python实现发送和获取手机短信验证码
Jan 15 Python
Python编程实现的图片识别功能示例
Aug 03 Python
python字典操作实例详解
Nov 16 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
python后端接收前端回传的文件方法
Jan 02 Python
python判断字符串或者集合是否为空的实例
Jan 23 Python
python把转列表为集合的方法
Jun 28 Python
python 处理微信对账单数据的实例代码
Jul 19 Python
Python识别html主要文本框过程解析
Feb 18 Python
Python读取文件内容为字符串的方法(多种方法详解)
Mar 04 Python
python3 re返回形式总结
Nov 20 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中copy on write写时复制机制介绍
2014/05/13 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
设定php简写功能的方法
2019/11/28 PHP
JavaScript Accessor实现说明
2010/12/06 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
Vue实现返回顶部按钮实例代码
2020/10/21 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
开源Web应用框架Django图文教程
2017/03/09 Python
使用python实现ANN
2017/12/20 Python
python深度优先搜索和广度优先搜索
2018/02/07 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
python dataframe NaN处理方式
2019/12/26 Python
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
测控技术与仪器个人求职信范文
2013/12/30 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
拒绝黄毒毒宣传标语
2014/06/26 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
小学工作总结2015
2015/05/04 职场文书
大国崛起日本观后感
2015/06/02 职场文书
会计入职心得体会
2016/01/22 职场文书