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制作在地图上模拟瘟疫扩散的Gif图
Mar 31 Python
python利用urllib和urllib2访问http的GET/POST详解
Sep 27 Python
python使用正则表达式替换匹配成功的组
Nov 17 Python
Python数据结构之栈、队列的实现代码分享
Dec 04 Python
[原创]python爬虫(入门教程、视频教程)
Jan 08 Python
Django中的CBV和FBV示例介绍
Feb 25 Python
基于python绘制科赫雪花
Jun 22 Python
对django中render()与render_to_response()的区别详解
Oct 16 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
Python实现串口通信(pyserial)过程解析
Sep 25 Python
python开发入门——列表生成式
Sep 03 Python
用ldap作为django后端用户登录验证的实现
Dec 07 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 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
PHP错误提示的关闭方法详解
2013/06/23 PHP
PHP基本语法总结
2014/09/06 PHP
php把数组值转换成键的方法
2015/07/13 PHP
使用PHP实现生成HTML静态页面
2015/11/18 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
JavaScript国旗变换效果代码
2008/08/13 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
jquery.validate.js 多个相同name的处理方式
2017/07/10 jQuery
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
vue如何实现动态加载脚本
2020/02/05 Javascript
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
Flask框架web开发之零基础入门
2018/12/10 Python
python实现简单多人聊天室
2018/12/11 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
Python里面如何拷贝一个对象
2014/02/17 面试题
医学专业职业生涯规划范文
2014/02/05 职场文书
会计实训报告范文
2014/11/04 职场文书
质量保证书怎么写
2015/02/27 职场文书
大学生创业计划书常用模板
2019/08/07 职场文书