一、cProfile 简介
- cProfile 是 python 自带的模块,对运行的代码做性能分析,可以输出运行时长。
二、分析示例
- 1. 直接加载 cProfile 模块运行代码进行输出分析。
# 方式一
# 直接输出调用的函数、运行时长、cpu占用等情况
python -m cProfile main.py
# 如果调用链路太长,则可以指定输出到文件内,如下所示。不过输出内容为二进制,不可以直接查看。
python -m cProfile -o profile.out main.py
# 方式二
import cProfile
def test():
pass
if __name__ == "__main__":
cProfile.run("test()")
- 2. 为了解决分析内容格式是二进制的,python 自带了可以分析的工具 pstats。示例代码如下
import pstats
# 创建Stats对象
p = pstats.Stats("profile/profile.out")
# strip_dirs(): 去掉无关的路径信息
# sort_stats(): 排序,支持的方式和上述的一致
# print_stats(): 打印分析结果,可以指定打印前几行,也可以指定小数,为百分比,
# 和直接运行cProfile.run("test()")的结果是一样的
p.strip_dirs().sort_stats(-1).print_stats()
# 按照函数名排序,只打印前3行函数的信息, 参数还可为小数,表示前百分之几的函数信息
p.strip_dirs().sort_stats("name").print_stats(3)
# 按照运行时间和函数名进行排序
p.strip_dirs().sort_stats("cumulative", "name").print_stats(0.5)
# 如果想知道有哪些函数调用了sum_num
p.print_callers(0.5, "test")
# 查看test()函数中调用了哪些函数
p.print_callees("test")
三、可视化分析
上面的分析只能做初步的统计查看,并不能直观的查看和分析。所以下面提供了函数堆栈调用图及每步所花费的时间占比等工具。
- 1. 安装 gprof2dot
pip install gprof2dot
- 2. 安装 graphviz 包。
# mac下
brew install graphviz
- 3. 对输出的 out 文件进行分析
gprof2dot -f pstats profile.out | dot -Tpng -o profile.png
其效果如下图
本文暂时没有评论,来添加一个吧(●'◡'●)