步骤
-
导入对应功能包
import cProfile,pstats
-
将性能检查代码嵌入指定区域
#===========example======== pr = cProfile.Profile() pr.enable() #---------enable和disable中间的代码片段会进行性能检测 o_seq_view = CSequenceView(ctx) pr.disable() ps = pstats.Stats(pr) ps.sort_stats("cumulative")#将收集到的数据按"累计时间"从大到小排序。 ps.print_stats(50)#仅打印排序后的top50个-输出至控制台
-
输出信息中的关键列属性含义
ncalls : 总调用次数 cumtime: 累积时间 percall(第二个):函数运行一次的平均时间。(包含了所有子函数运行时间)
参考
The following are the valid string and SortKey:
SortKey代表可填入sort_stats方法中的排序枚举量
有效字符串参数 | 有效枚举参数 | 含义 |
---|---|---|
'calls' |
SortKey.CALLS | 调用次数 |
'cumulative' |
SortKey.CUMULATIVE | 累积时间 |
'cumtime' |
N/A | 累积时间 |
'file' |
N/A | 文件名 |
'filename' |
SortKey.FILENAME | 文件名 |
'module' |
N/A | 文件名 |
'ncalls' |
N/A | 调用次数 |
'pcalls' |
SortKey.PCALLS | 原始调用计数 |
'line' |
SortKey.LINE | 行号 |
'name' |
SortKey.NAME | 函数名称 |
'nfl' |
SortKey.NFL | 名称/文件/行 |
'stdname' |
SortKey.STDNAME | 标准名称 |
'time' |
SortKey.TIME | 内部时间 |
'tottime' |
N/A | 内部时间The following are the valid string and SortKey: |
可视化(需要结合文件输出操作)
#输出到文件中-可借助Stats类中的dump_stats方法
#==========example=========
pr = cProfile.Profile()
pr.enable()
#---your -logic--
pr.disable()
ps = pstats.Stats(pr)
ps.sort_stats("cumulative")
ps.print_stats(15)
ps.dump_stats("test.out")
还需要安装对应的可视化工具snakeviz
,采用python的pip命令进行安装即可。
如何生成?
找到test.out的所在文件夹,执行命令snakeviz test.out
即可。