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的WEB框架Flask中使用多个配置文件的解决方法
Apr 18 Python
举例详解Python中yield生成器的用法
Aug 05 Python
python daemon守护进程实现
Aug 27 Python
Python实现聊天机器人的示例代码
Jul 09 Python
浅谈Pycharm中的Python Console与Terminal
Jan 17 Python
对python判断是否回文数的实例详解
Feb 08 Python
Python3多线程版TCP端口扫描器
Aug 31 Python
python使用Matplotlib改变坐标轴的默认位置
Oct 18 Python
Python中断多重循环的几种方式详解
Feb 10 Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
PyTorch安装与基本使用详解
Aug 31 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解析json数据实例
2014/08/19 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
jQuery代码优化 事件委托篇
2011/11/01 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
基于JQuery打造无缝滚动新闻步骤详解
2016/03/31 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
Python遍历文件夹 处理json文件的方法
2019/01/22 Python
python multiprocessing多进程变量共享与加锁的实现
2019/10/02 Python
Python Collatz序列实现过程解析
2019/10/12 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
如何在存储过程中使用Loop
2016/01/05 面试题
PHP使用Redis队列执行定时任务实例讲解
2021/03/24 PHP
中专毕业个人的自荐信格式
2013/09/21 职场文书
幼儿运动会邀请函
2014/01/17 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
个人年终总结范文
2015/03/09 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL