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中global语句下全局变量的值的修改
Jun 16 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
Dec 12 Python
Python数据操作方法封装类实例
Jun 23 Python
pandas 获取季度,月度,年度首尾日期的方法
Apr 11 Python
Python实现多属性排序的方法
Dec 05 Python
python3使用pandas获取股票数据的方法
Dec 22 Python
python 字典套字典或列表的示例
Dec 16 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
python爬虫快速响应服务器的做法
Nov 24 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 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 jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
2018/11/10 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
jQuery+HTML5实现图片上传前预览效果
2015/08/20 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
微信小程序实现底部弹出框
2020/11/18 Javascript
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
学习python的前途 python挣钱
2019/02/27 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
python 初始化一个定长的数组实例
2019/12/02 Python
详解Python设计模式之策略模式
2020/06/15 Python
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
酷瑞网络科技面试题
2012/03/30 面试题
介绍下java.util.Arrays类
2012/10/16 面试题
运动会通讯稿500字
2014/02/20 职场文书
《母鸡》教学反思
2014/02/25 职场文书
工厂车间标语
2014/06/19 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
二手房购房意向书
2015/05/09 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书
导游词之山西-五老峰
2019/10/07 职场文书