采用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中使用sys模板和logging模块获取行号和函数名的方法
Apr 15 Python
安装Python的web.py框架并从hello world开始编程
Apr 25 Python
Python中函数的参数传递与可变长参数介绍
Jun 30 Python
Python 文件操作的详解及实例
Sep 18 Python
Flask 让jsonify返回的json串支持中文显示的方法
Mar 26 Python
Python类和对象的定义与实际应用案例分析
Dec 27 Python
对python实现合并两个排序链表的方法详解
Jan 23 Python
python调用c++传递数组的实例
Feb 13 Python
python 默认参数相关知识详解
Sep 18 Python
tensorflow 实现从checkpoint中获取graph信息
Feb 10 Python
Python pip使用超时问题解决方案
Aug 03 Python
一文详述 Python 中的 property 语法
Sep 01 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
百度站点地图(百度sitemap)生成方法分享
2014/01/09 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
WAF的正确bypass
2017/01/05 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
浅析Bootstrap验证控件的使用
2016/06/23 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
vue 添加vux的代码讲解
2017/11/30 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
Python实现的多进程和多线程功能示例
2018/05/29 Python
python中字符串内置函数的用法总结
2018/09/13 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
Django密码系统实现过程详解
2019/07/19 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
土建资料员岗位职责
2014/01/04 职场文书
海飞丝广告词
2014/03/20 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
解除同居协议书
2015/01/29 职场文书
瘦西湖导游词
2015/02/03 职场文书