首页 / 知识
Python 性能剖分工具
2023-11-12 13:36:00
眼看着项目即将完成,却被测试人员告知没有通过性能测试,这种情况在开发中屡见不鲜。接下来的工作就是加班加点地找出性能瓶颈,然后进行优化,再进行性能测试,如此这般周而复始直到通过性能测试。尽管丰富的工作经验有助于性能优化,但只有科学地应用工具才能在最短的时间内找出最佳优化粒度的瓶颈代码段,达到事半功倍的效果。
profile、cProfile与hotshot
Python内置了丰富的性能优化工具来帮助我们定位性能瓶颈,如:profile、cProfile和hotshot。它们易于使用,而且有完备的支持文档可供参考。下面以最常用的profile模块为例来说明它们的使用方法,假定要剖分的脚本文件为foo.py,它的内容如下:
deffoo():
sum=0
foriinrange(100):
sum+=i
returnsum
if__name__=="__main__":
foo()
对foo.py进行性能剖分的方法之一是修改foo.py里的if程序块,引入profile模块:
if__name__=="__main__":
importprofile
profile.run("foo()")
然后执行foo.py即可完成性能剖分,剖分结果将以文本报表的形式打印到标准输出。
因为上述方法需要修改foo.py文件,所以我们通常更倾向于使用无需修改源文件的方法——就是在命令行中用应用python的–m参数来执行profile:
python–mprofilefoo.py
除了可以使用profile模块外,还可以使用cProfile模块。cProfile由C语言实现,是剖分代价更低的剖分器,有和profile模块相同的接口,但只能用于2.5或以上版本。Python另一个内置的剖分器是hotshot,但是hotshot模块已经不再推荐使用,因为将来它可能会被移出标准库。
pstats
无论使用哪个剖分器,它的剖分数据都可以保存到二进制文件,如foo.prof。分析和查看剖分结果文件需要使用pstats模块,它极具伸缩性,可以输出形式多样的文本报表,是文本界面下不可或缺的工具。
使用pstats分析剖分结果很简单,几行代码就可以了:
importpstats
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–mpstats就可以进入交互环境,在交互环境里可以使用read/add指令读入/加载剖分结果文件,stats指令用以查看报表,callees和callers指令用以查看特定函数的被调用者和调用者。下图是pstats的截图,标识了它的基本使用方法
以上内容为大家介绍了Python性能剖分工具,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注我们http://www.mobiletrain.org/
最新内容
相关内容
Python网络编程调用接收数据的三种
Python网络编程调用接收数据的三种方法,数据,代码,基础,通用,通讯,服务,网络,培训,方法,报文,最近在使用python进行网络编程开发一个通用的tc为什么开发人员喜欢在机器学习和人
为什么开发人员喜欢在机器学习和人工智能项目中使用Python?,代码,项目,数据,人工智能,平台,异常,增长,灵活,时间,工具,1.Python是灵活的Pytho数据科学领域Python比R语言更好
数据科学领域Python比R语言更好,数据,公司,工具,时间,项目,工作,庞大,受益,系统,代码,经常有学员问我们,在数据科学领域里,到底是该选Python呢,为何你的Python代码应是扁平与稀疏
为何你的Python代码应是扁平与稀疏的,代码,培训,信息,观察,设计,工具,嵌套,闻闻,程序员,沉思,Python之禅之所以得名,正是由于它那简明扼要的规如何提速优化python代码?
如何提速优化python代码?,代码,时间,数据,新增,写法,包装,情况,下来,面临,工作,Python是一种脚本语言,相比C/C++这样的编译语言,在效率和性能方Python语言自带的数据结构有哪些
Python语言自带的数据结构有哪些,异常,数字,数据,元素,序列,培训,位置,名称,分析,括号,Python作为一种脚本语言,其要求强制缩进,使其易读、美观提升Python数据分析能力的方法
提升Python数据分析能力的方法,分析,数据,工具,代码,时间,环境,报告,信息,培训,标准,1.Pandas分析包这个工具的好处是显而易见的。下面的动画Python标准库之collections模块
Python标准库之collections模块,名字,标准,信息,电话号码,培训,工厂,位置,简介,异常,对象,collections模块简介collections是Python标准库里用于业余项目的优秀 Python 库
用于业余项目的优秀 Python 库,数据,工具,项目,信息,培训,系统,地图,下来,工作,管理,1.在数据库中即时保存数据:Dataset当我们想要在不知道最Web开发人员推荐的Python框架
Web开发人员推荐的Python框架,系统,公司,灵活,时间,项目,软件,框架,认证,管理,异常,您可以在没有框架的情况下创建出色的应用程序。如果您正数据科学中必须了解的Python核心库
数据科学中必须了解的Python核心库,数据,生产,代码,标准,分析,培训,图片,工具,统一,涉足,python有三个核心数据科学库,在此基础上还创建了许多Python集合和时间复杂度
Python集合和时间复杂度,项目,时间,数据,数字,照片,情况,通用,培训,平均,表示,在本文的这一部分中,我将记录CPython中的常见集合,然后概述它们