Python 性能优化技巧总结


Posted in Python onNovember 01, 2016

1.使用测量工具,量化性能才能改进性能,常用的timeitmemory_profiler,此外还有profilecProfilehotshot等,memory_profiler用了psutil,所以不能跟踪cpython的扩展;

2.用C来解决费时的处理,c是效率的代名词,也是python用来解决效率问题的主要途径,甚至有时候我都觉得python是c的完美搭档。常用的是Cython,直接把py代码c化然后又能像使用py包一样使用,其次是ctypes,效率最最高的存在,最后还有CPythoncffi都是??诺拇嬖冢?/p>

3.优化算法,所有语言通病,算法的提升我觉得是在所有提升之上的,但也是最难的,好在现在大部分常用的算法都已经封包,除非自己给自己挖坑,所以弄懂标准库里的数据结构和常用api是如何实现的很重要;

4.2里的实现有人做了更高效的包用以替换python中常见的一些实现,如果瓶颈在stringio、pickle、profile这类上的可以考虑替换为c的版本;

5.数据结构尽量使用元组tuple,特别是数据量大的时候,实在不行list也可以,尽量不要用class,如果一定要用可以加slot,效率再不够就只能结合2来加速了;

6.延迟加载,import不是一定要写在一页的开始,哪里都可以,越碎片越能把包的加载延迟甚至不被加载;

7.用multiprocessing来实现多线程,可以跳出GIL的限制;

8.python处理循环很烂,解释性语言就这样,跟其它编译型语言比就是蜗牛,所以减少循环次数和嵌套次数能显著提升性能,当然了使用pypy就没有这个问题了;

9.使用加速器,很喜欢psyco的使用方式,如果用2.7-的版本那么不失为一个懒人的选择,现在已经不再维护,创始人去了pypy,pypy是用Python实现的python,底层转为平台依赖的c、.net、java的中间语言,方式非常聪明,大爱,但是缺点是库的支持还不完善,我的项目基本都能支持,解决几个小问题即可,如果性能瓶颈在循环和内存上可以试试,最大的好处是不需要更改一句代码和做另外的设置,没有任何侵入。

参考资料:

Python 代码性能优化技巧: https://www.ibm.com/developerworks/cn/linux/l-cn-python-optim/

Python性能优化技巧: http://kuanghy.github.io/2016/09/26/python-optimize

Python 相关文章推荐
跟老齐学Python之有容乃大的list(2)
Sep 15 Python
win7上python2.7连接mysql数据库的方法
Jan 14 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
Vue的el-scrollbar实现自定义滚动
May 29 Python
Python制作exe文件简单流程
Jan 24 Python
Python实现的IP端口扫描工具类示例
Feb 15 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
Feb 21 Python
在pycharm下设置自己的个性模版方法
Jul 15 Python
Django使用中间件解决前后端同源策略问题
Sep 02 Python
Django ORM 查询表中某列字段值的方法
Apr 30 Python
python如何实现图片压缩
Sep 11 Python
Python+Tkinter制作专属图形化界面
Apr 01 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 #Python
浅谈django中的认证与登录
Oct 31 #Python
python 把数据 json格式输出的实例代码
Oct 31 #Python
python中json格式数据输出的简单实现方法
Oct 31 #Python
python并发编程之多进程、多线程、异步和协程详解
Oct 28 #Python
微信 用脚本查看是否被微信好友删除
Oct 28 #Python
使用Python将数组的元素导出到变量中(unpacking)
Oct 27 #Python
You might like
php preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
2012/07/31 Javascript
21个值得收藏的Javascript技巧
2014/02/04 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
2016/07/07 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
JS面向对象之多选框实现
2020/01/17 Javascript
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
Python psutil模块简单使用实例
2015/04/28 Python
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
python合并已经存在的sheet数据到新sheet的方法
2018/12/11 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
为什么说python更适合树莓派编程
2020/07/20 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
香港太阳眼镜网上商店:SmartBuyGlasses香港
2016/07/22 全球购物
世界上最大的巴士旅游观光公司:Big Bus Tours
2016/10/20 全球购物
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
银行财务部实习生的自我鉴定
2013/11/27 职场文书
自我鉴定四大框架
2014/01/17 职场文书
优秀学生获奖感言
2014/02/15 职场文书
开场白怎么写
2015/06/01 职场文书
遇事可以测出您的见识与格局
2019/09/16 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL