编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

python 性能分析工具 cProfile(python性能调优工具)

wxchong 2024-07-06 23:53:14 开源技术 16 ℃ 0 评论

一、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

其效果如下图

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表