Python 性能优化技巧总结
作者:hebedich 发布时间:2023-03-01 00:36:46
1.使用测量工具,量化性能才能改进性能,常用的timeit
和memory_profiler
,此外还有profile
、cProfile
、hotshot
等,memory_profiler
用了psutil
,所以不能跟踪cpython
的扩展;
2.用C来解决费时的处理,c是效率的代名词,也是python用来解决效率问题的主要途径,甚至有时候我都觉得python是c的完美搭档。常用的是Cython
,直接把py代码c化然后又能像使用py包一样使用,其次是ctypes
,效率最最高的存在,最后还有CPython
和cffi
都是 * * 的存在;
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
猜你喜欢
- 9月23,Django 发布了2.0a1版本,这是一个 feature freeze 版本,如果没有什么意外的话,2.0正式版不会再增加新的
- session_unset() 释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的sessio
- 本文实现了用Python和OpenCV配合,调用本地摄像头采集视频,基本上函数的话看opencv的官方文档就Ok了(The OpenCV R
- 前言大家应该都有所体会,在不同的项目可能会使用不同的Django版本,兼任性是大问题,如果不幸要去接手不同版本的项目,比较惨烈!如果想重装一
- 在mysql安装目录的bin下, 运行mysql --install MYSQL5查看服务中, 会多一个MYSQL5的服务XAMPP的控制面
- 环境系统:Centos7.2 服务:Nginx1:下载PHP7.0.2的安装包解压,编译,安装: $ cd /usr/s
- Python程序可以调用一组基本的函数(即内建函数),比如print()、input()和len()等函数。Python本身也内置一组模块(
- 一、爬虫是什么? 在进行大数据分析或者进行数据挖掘的时候,数据源可以从某些提供数据统计的网站获得,也可以从某些文献或内部资料中获得
- 前言help(argparse)查看说明文档,“argparse - Command-line parsing libr
- 今天研究了一下JS的用setAttribute方法实现一个页面两份样式表的效果,具体方法如下:第一步:在连接样式表的元素里定义一个id,例如
- 在学习vue的时候,遇到很多问题,这里做一些总结,持续更新。今天说一个问题,就是在学习vue的时候,从之前的1.0版本升级到2.x的时候,遇
- 利用python+ffmpeg合并B站视频及格式转换 B站客户端下载的视频一般有两种格式:早期的多为blv格式(由flv格式转换而来,音视频
- 一、需求来源工作中需要一种树形菜单组件,经过两天的构思最终通过作用域插槽实现: 此组件将每个节点(插槽名为 node)暴露出来。通过插槽的
- 应用 MySQL 时,会遇到不能创建函数的情况。出现如下错误信息:ERROR 1418 : This function has none o
- Group By分组后选取每组最新的一条数据问题group by语句只会展示一条数据,而且很多时候并不会展示我们想要的数据,如何解决呢首先我
- step1:首先介绍下python+appium的框架结构,如下截图所示(1):apk目录主要放置待测app的apk资源;(2):confi
- 本文实例为大家分享了TensorFlow实现Logistic回归的具体代码,供大家参考,具体内容如下1.导入模块import numpy a
- 如下:将html文件下载后,使用BeauifulSoup读取文件,并且使用html.parsertmp_soup.select里面的参数为:
- 前言:我目前使用的服务器为centos6.x 系统自带的python的版本为2.6.x,但是目前无论是学习还是使用python,python
- pycharm全局修改pycharm 全局改函数方法1ctrl shift r全局替换方法2点击函数,右键 Refactor Ch