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实现的阳历转阴历(农历)算法
Apr 25 Python
python3中set(集合)的语法总结分享
Mar 24 Python
python利用拉链法实现字典方法示例
Mar 25 Python
Python调用ctypes使用C函数printf的方法
Aug 23 Python
Python3 循环语句(for、while、break、range等)
Nov 20 Python
Python星号*与**用法分析
Feb 02 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
python实现简单多人聊天室
Dec 11 Python
python运行时强制刷新缓冲区的方法
Jan 14 Python
利用python将图片版PDF转文字版PDF
May 03 Python
YUV转为jpg图像的实现
Dec 09 Python
python scatter函数用法实例详解
Feb 11 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扩展ZF――Validate扩展
2008/01/10 PHP
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
PHP实现多图上传和单图上传功能
2018/05/17 PHP
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
jquery.cookie() 方法的使用(读取、写入、删除)
2013/12/05 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
基于Vue实现页面切换左右滑动效果
2020/06/29 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
2020/06/23 Javascript
[52:36]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
pandas值替换方法
2018/07/10 Python
python实现梯度下降算法
2020/03/24 Python
python树的同构学习笔记
2019/09/14 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
深圳-东方伟业笔试部分
2015/02/11 面试题
金融专业推荐信
2013/11/14 职场文书
银行委托书范本
2014/04/04 职场文书
英语教研活动总结
2014/07/02 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
雷锋的故事观后感
2015/06/10 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
带你了解Java中的ForkJoin
2022/04/28 Java/Android