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框架Bottle
Apr 08 Python
Python字符串处理实现单词反转
Jun 14 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
Python第三方Window模块文件的几种安装方法
Nov 22 Python
Django 接收Post请求数据,并保存到数据库的实现方法
Jul 12 Python
Python 简单计算要求形状面积的实例
Jan 18 Python
Python使用扩展库pywin32实现批量文档打印实例
Apr 09 Python
python 使用raw socket进行TCP SYN扫描实例
May 05 Python
Python如何解除一个装饰器
Aug 07 Python
Pycharm连接gitlab实现过程图解
Sep 01 Python
详解pandas赋值失败问题解决
Nov 29 Python
Python实现邮件发送的详细设置方法(遇到问题)
Jan 18 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数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
php学习之 数组声明
2011/06/09 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
PHP7变量处理机制修改
2021/03/09 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
Using the TextRange Object
2006/10/14 Javascript
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
2015/12/18 Javascript
js实现分割上传大文件
2016/03/09 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
跟老齐学Python之print详解
2014/09/28 Python
Python实现socket非阻塞通讯功能示例
2019/11/06 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
世界上最大的在线旅行社新加坡网站:Expedia新加坡
2016/08/25 全球购物
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
购房协议书范本(无房产证)
2014/10/07 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
高二语文教学反思
2016/02/16 职场文书
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS