这篇博客总结的很好
- 生成原始性能分析文件
方式1 在脚本文件中添加如下代码
假设我们要进行分析的程序为demo.py
import cProfile
import re
cProfile.run('re.compile("demo,py")',filename='result.out')
方式2 命令行中运行
python3 -m cProfile -o result.out demo.py
输出结果会保存在当前目录下 ,生成或覆盖一个result.out文件
- 表格化分析原始文件:用 pstats 表格化分析由 cProfile 生成的原始文件
import pstats
p = pstats.Stats("/home/code/result.out")# 按照运行时间和函数名进行排序
p.strip_dirs().sort_stats("cumulative", "name").print_stats(0.5)#参数为小数 表示前百分之几的函数信息
p.strip_dirs().sort_stats("cumulative", "name").print_stats(30)#参数为整数 打印前30行
- 使用snakeviz图形化分析原始文件
snakeviz result.out
如果出现command not found: snakeviz报错
使用
python3 -m snakeviz result.out
来自解决方法:More recent PRs have added the ability to call SnakeViz via
python -m snakeviz name_of_profile
which won’t depend on the snakeviz executable being available.
浏览器中图形化分析效果:
终端里表格化分析的效果
第一行2663939为总的函数调用次数
第二行显示采用的排序方式
第三行显示当前选择只列出前30条
如果在终端中想要结束
snakeviz进程——ctrl+c
*性能指标:
Cumulative time
:程序运行总时长
ncalls
函数调用次数
tottime
在指定函数中消耗的总时间(不包括调用子函数的时间)
percall
=
tottime / ncalls
计量函数调用平均消耗时间
cumtime
指定的函数及其所有子函数(从调用到退出)消耗的累积时间。
percall
=
cumtime/primitive calls
计量函数运行一次的平均累计时间*
版权归原作者 weixin_56336619 所有, 如有侵权,请联系我们删除。