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实现360的字符显示界面
Feb 21 Python
Python MySQLdb模块连接操作mysql数据库实例
Apr 08 Python
基于python实现微信模板消息
Dec 21 Python
Python用UUID库生成唯一ID的方法示例
Dec 15 Python
Python3 处理JSON的实例详解
Oct 29 Python
python查看列的唯一值方法
Jul 17 Python
python3.x 将byte转成字符串的方法
Jul 17 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
python pip源配置,pip配置文件存放位置的方法
Jul 12 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
Python识别html主要文本框过程解析
Feb 18 Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 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的5个安全措施小结
2012/07/17 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
2019/04/17 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
vue子路由跳转实现tab选项卡
2019/07/24 Javascript
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
对pandas中apply函数的用法详解
2018/04/10 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
美国著名的品牌折扣店:Burlington
2017/06/08 全球购物
Linux常见面试题
2013/03/18 面试题
工厂保洁员岗位职责
2013/12/04 职场文书
通知格式
2015/04/27 职场文书
山楂树之恋观后感
2015/06/11 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
python爬虫之selenium库的安装及使用教程
2021/05/23 Python
Go中的条件语句Switch示例详解
2021/08/23 Golang
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python
详解python的异常捕获
2022/03/03 Python