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发送和接收邮件
Sep 27 Python
Python实现Linux中的du命令
Jun 12 Python
Python书单 不将就
Jul 11 Python
python+PyQT实现系统桌面时钟
Jun 16 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
Jun 21 Python
对python3 sort sorted 函数的应用详解
Jun 27 Python
关于python字符串方法分类详解
Aug 20 Python
python爬虫之爬取百度音乐的实现方法
Aug 24 Python
Python 静态方法和类方法实例分析
Nov 21 Python
Python基础之变量基本用法与进阶详解
Jan 03 Python
python脚本定时发送邮件
Dec 22 Python
Python实现我的世界小游戏源代码
Mar 02 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 foreach循环使用详解与实例代码
2010/05/08 PHP
linux iconv方法的使用
2011/10/01 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
PDO::errorInfo讲解
2019/01/28 PHP
javascript 写的一个简单的timer
2009/07/30 Javascript
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
深入剖析JavaScript中的函数currying柯里化
2016/04/29 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
解决option标签selected="selected"属性失效的问题
2017/11/06 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
python中实现php的var_dump函数功能
2015/01/21 Python
基于Python os模块常用命令介绍
2017/11/03 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
Python列表解析配合if else的方法
2018/06/23 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
2018/12/24 Python
python获取引用对象的个数方式
2019/12/20 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
python中如何使用虚拟环境
2020/10/14 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
大学生自我鉴定
2013/12/16 职场文书
中专生自我鉴定范文
2013/12/19 职场文书
公司会计主管岗位责任制
2014/03/01 职场文书
合作协议书
2014/04/23 职场文书
实习报告评语
2014/04/26 职场文书
Python中的socket网络模块介绍
2022/07/23 Python