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中几个比较常见的名词解释
Jul 04 Python
Python遍历numpy数组的实例
Apr 04 Python
使用Python如何测试InnoDB与MyISAM的读写性能
Sep 18 Python
实例讲解Python脚本成为Windows中运行的exe文件
Jan 24 Python
Python小进度条显示代码
Mar 05 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
python并发编程多进程之守护进程原理解析
Aug 20 Python
详解Pycharm出现out of memory的终极解决方法
Mar 03 Python
Python新手学习标准库模块命名
May 29 Python
python开发入门——set的使用
Sep 03 Python
python利用递归方法实现求集合的幂集
Sep 07 Python
Python Pandas读取Excel日期数据的异常处理方法
Feb 28 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
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
php+mysql 实现身份验证代码
2010/03/24 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
jQuery stop()用法实例详解
2016/07/28 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
javascript实现导航栏分页效果
2019/06/27 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
python函数参数*args**kwargs用法实例
2013/12/04 Python
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
python 二分查找和快速排序实例详解
2017/10/13 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
使用pandas的DataFrame的plot方法绘制图像的实例
2018/05/24 Python
对pandas中to_dict的用法详解
2018/06/05 Python
python实现多进程代码示例
2018/10/31 Python
Python随机数函数代码实例解析
2020/02/09 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
2020/04/20 Python
Spark处理数据排序问题如何避免OOM
2020/05/21 Python
python一些性能分析的技巧
2020/08/30 Python
农场厂长岗位职责
2013/12/28 职场文书
小学生读书感言
2014/02/12 职场文书
志愿者活动总结
2014/04/28 职场文书
预备党员公开承诺书
2014/05/28 职场文书
找工作求职信
2014/07/07 职场文书
教书育人演讲稿
2014/09/11 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android