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 socket.error: [Errno 98] Address already in use的原因和解决方法
Aug 25 Python
Python查询阿里巴巴关键字排名的方法
Jul 08 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
Mar 15 Python
DataFrame中的object转换成float的方法
Apr 10 Python
Python之时间和日期使用小结
Feb 14 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 Python
详解DeBug Python神级工具PySnooper
Jul 03 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
在django admin中添加自定义视图的例子
Jul 26 Python
keras load model时出现Missing Layer错误的解决方式
Jun 11 Python
Tensorflow--取tensorf指定列的操作方式
Jun 30 Python
一篇文章教你用python画动态爱心表白
Nov 22 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微信支付之APP支付方法
2015/03/04 PHP
php关联数组快速排序的方法
2015/04/17 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
2017/02/08 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
Python中的lstrip()方法使用简介
2015/05/19 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
Python处理文本换行符实例代码
2018/02/03 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
Python Series从0开始索引的方法
2018/11/06 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
django做form表单的数据验证过程详解
2019/07/26 Python
python实现邮件发送功能
2019/08/10 Python
Django models filter筛选条件详解
2020/03/16 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
How to spawning asynchronous work in J2EE
2016/08/29 面试题
银行柜员应聘推荐信范文
2013/11/24 职场文书
教师档案管理制度
2014/01/23 职场文书
搞笑获奖感言
2014/01/30 职场文书
施工单位安全责任书
2014/07/24 职场文书
私人委托书格式
2014/09/10 职场文书
社区植树节活动总结
2015/02/06 职场文书