Python 性能剖分工具
Python 性能剖分工具
眼看着项目即将完成,却被测试人员告知没有通过性能测试,这种情况在开发中屡见不鲜。接下来的工作就是加班加点地找出性能瓶颈,然后进行优化,再进行性能测试,如此这般周而复始直到通过性能测试。尽管丰富的工作经验有助于性能优化,但只有科学地应用工具才能在最短的时间内找出最佳优化粒度的瓶颈代码段,达到事半功倍的效果。
profile、cProfile与hotshot
Python 内置了丰富的性能优化工具来帮助我们定位性能瓶颈,如:profile、cProfile和 hotshot。它们易于使用,而且有完备的支持文档可供参考。下面以最常用的 profile 模块为例来说明它们的使用方法,假定要剖分的脚本文件为 foo.py ,它的内容如下:
def foo():
sum = 0
for i in range(100):
sum += i
return sum
if __name__ == "__main__":
foo()
对 foo.py 进行性能剖分的方法之一是修改 foo.py 里的 if 程序块,引入 profile 模块:
if __name__ == "__main__":
import profile
profile.run("foo()")
然后执行 foo.py 即可完成性能剖分,剖分结果将以文本报表的形式打印到标准输出。
因为上述方法需要修改 foo.py 文件,所以我们通常更倾向于使用无需修改源文件的方法——就是在命令行中用应用 python 的 –m 参数来执行 profile :
python –m profile foo.py
除了可以使用 profile 模块外,还可以使用 cProfile 模块。cProfile由 C 语言实现,是剖分代价更低的剖分器,有和 profile 模块相同的接口,但只能用于2.5或以上版本。Python 另一个内置的剖分器是 hotshot,但是 hotshot 模块已经不再推荐使用,因为将来它可能会被移出标准库。
pstats
无论使用哪个剖分器,它的剖分数据都可以保存到二进制文件,如foo.prof。分析和查看剖分结果文件需要使用 pstats 模块,它极具伸缩性,可以输出形式多样的文本报表,是文本界面下不可或缺的工具。
使用 pstats 分析剖分结果很简单,几行代码就可以了:
import pstats
p = pstats.Stats("foo.prof")
p.sort_stats("time").print_stats()
运行上述脚本将输出结果为按函数内部运行时间(不计调用子函数的时间)长短排序的报表。
sort_stats() 方法是 pstats.Stats 最重要的方法之一,它用以对剖分数据进行排序。sort_stats() 接受一个字符串参数,这个字符串标识了排序的字段,常用的可选的参数及其意义如下:
|
‘ncalls’ |
被调用次数 |
|
‘cumulative’ |
函数运行的总时间 |
|
‘nfl’ |
Name/file/line |
|
‘time’ |
函数内部运行时间(不计调用子函数的时间) |
除了 sort_stats() 外, pstats.Stats 还有 print_callees() 和 print_callers() 方法用以输出指定函数所调用的函数和调用过指定函数的函数。
除了编编程接口外,pstats 还提供了友好的命令行交互环境,在命令行执行 python –m pstats 就可以进入交互环境,在交互环境里可以使用 read/add 指令读入/加载剖分结果文件,stats 指令用以查看报表, callees 和 callers 指令用以查看特定函数的被调用者和调用者。下图是 pstats 的截图,标识了它的基本使用方法:
from :http://blog.csdn.net/gzlaiyonghao/article/details/2120147
Python 性能剖分工具的更多相关文章
- Python性能分析工具Profile
Python性能分析工具Profile 代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 ...
- python性能检测工具整理
python 运行后出现core dump产生core.**文件,可通过gdb来调试 Using GDB with a core dump having found build/python/core ...
- Python 性能分析工具简介
Table of Contents 1. 性能分析和调优工具简介 1.1. Context Manager 1.2. Decorator 1.3. 系统自带的time命令 1.4. python ti ...
- 安装python性能检测工具line_profiler
line_profiler是一款监测python的CPU密集型性能问题的强大工具,可以对函数进行逐行分析,在linux上安装时一切正常,然而今天在win10 64位系统安装失败了 pip3 insta ...
- cProfile——Python性能分析工具
Python自带了几个性能分析的模块:profile.cProfile和hotshot,使用方法基本都差不多,无非模块是纯Python还是用C写的.本文介绍cProfile. 例子 import t ...
- Python性能分析工具
import cProfile import pstats from flask import Flask,jsonify, request @app.route("/test", ...
- Python性能分析
Python性能分析 https://www.cnblogs.com/lrysjtu/p/5651816.html https://www.cnblogs.com/cbscan/articles/33 ...
- Python测试 ——开发工具库
Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. selenium - web UI自动化测试. mechanize- Python中有状态的程序化Web浏 ...
- python测试开发工具库汇总(转载)
Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. selenium - web UI自动化测试. mechanize- Python中有状态的程序化Web浏 ...
随机推荐
- ls-dyna基础教程
刚刚开始使用ls-dyna,几天前还只知道点开dyna界面,然后就没有然后了,没人带,资料也没多少,但是科研还得继续往下做呀(手动滑稽),通过在仿真论坛上搜索相关的资料,并通过自己的一步步操作,做了大 ...
- ionic新入坑-环境搭建+新建项目+打开低版本项目处理
是的.我又双叒叕入新坑了.想我大学的时候web-app刚火起来.还帮忙做了我们学校医务室系统的web-app页面部分呢.时间太紧最后也没出个完整的版本.那时候只是用H5简单做了web部分.是想着用ph ...
- testng执行多个suite
由于testng.xml中只能设置一个<suite>标签,就无法创建多个测试集,通过<suite-files >标签可以实现允许多个测试集. 1.testng.xml中引入多个 ...
- [SCOI2008]城堡
题目描述 在一个国家里,有n个城市(编号为0 到n-1).这些城市之间有n条双向道 路相连(编号为0 到n-1),其中编号为i的道路连接了城市i和城市ri(一条道 路可以连接一个城市和它自身),长度为 ...
- [Tjoi2013]最长上升子序列
Description 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? Input 第一行一 ...
- ●线段树的三个题(poj 3225,hdu 1542,hdu 1828)
●poj 3225 Help with Intervals(线段树区间问题) ○赘述题目 给出以下集合操作: 然后有初始的一个空集S,和以下题目给出的操作指令,并输入指令: 要求进行指令操作后,按格式 ...
- 勤拂拭软件系列教程 - java web开发
勤拂拭软件工作室持续推出Java Web开发系列教程与案例,供广大朋友分享交流技术经验,帮助喜欢java的朋友们学习进步: 1. 勤拂拭软件 java web 开发教程(1) - 开发环境搭建 勤拂拭 ...
- 使用JAXB解析xml文件(二)
前面一章简单演示了JAXB的用法,这个章节主要梳理一下JAXB常见的几个注解 1.@XmlRootElement 用于类级别的注解,对应xml的跟元素,常与 @XmlType 和 @XmlAccess ...
- c# datatable增加列并赋值
DataView dv = DataObj.GetBmfzr("03").Tables[0].DefaultView; dv.Sort = "bmbh"; Da ...
- 如何成为快手尬舞王?HUAWEI HiAI了解一下!
左手!右手!抱一抱!扭一扭! 快手短视频,红遍东西南北中, 给大家的生活增添了不少乐趣. 有了人体姿态识别的魔法表情, 不会跳舞的也都可以跟着跳一跳. 从村口朴实的阿姨,到写字楼里端庄的白领, 在人体 ...