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中变量交换的例子
Aug 25 Python
python设计模式大全
Jun 27 Python
Python中的变量和作用域详解
Jul 13 Python
对Tensorflow中权值和feature map的可视化详解
Jun 14 Python
Ubuntu18.04下python版本完美切换的解决方法
Jun 14 Python
深入了解Django中间件及其方法
Jul 26 Python
使用Puppeteer爬取微信文章的实现
Feb 11 Python
Python读取配置文件(config.ini)以及写入配置文件
Apr 08 Python
Python实现密钥密码(加解密)实例详解
Apr 26 Python
利用PyTorch实现VGG16教程
Jun 24 Python
python用tkinter实现一个简易能进行随机点名的界面
Sep 27 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
Oct 15 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作为网站开发语言的原因分享
2012/01/03 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
PHP安全上传图片的方法
2015/03/21 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
传递参数的标准方法(jQuery.ajax)
2008/11/19 Javascript
jquery 简单导航实现代码
2009/09/11 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
2013/05/26 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
JavaScript数组_动力节点Java学院整理
2017/06/26 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
简单谈谈js的数据类型
2017/09/25 Javascript
浅谈Node.js爬虫之网页请求模块
2018/01/11 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
Python实现自动上京东抢手机
2018/02/06 Python
python 重定向获取真实url的方法
2018/05/11 Python
python 3.7.0 下pillow安装方法
2018/08/27 Python
设置python3为默认python的方法
2018/10/31 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
Python3 执行Linux Bash命令的方法
2019/07/12 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
世界上最好的野生海鲜和有机食品:Vital Choice
2020/01/16 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
大学生毕业的自我评价分享
2014/01/02 职场文书
生物学专业求职信
2014/07/23 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS