python cProfile/snakeviz 无法处理调用同一函数的多个函数

Mat*_*ert 4 python cprofile

我在解释数据时遇到问题cProfile。为了向您展示我的问题,我创建了这个简单的脚本。

函数 D 调用 B 和 C,它们都调用 A。
函数 A 显然占用了 1 秒(+开销)。
如果我们查看蛇形可视化结果,您会发现报告有点奇怪。我知道函数 A 总共花费了 2 秒,但在函数 C 内,函数 A 只花费了 1 秒,这就是我感兴趣的。有谁知道是否有一个设置(或不同的查看器)在其中我的没有这个问题吗?

import time
import cProfile

def A():
    time.sleep(1)

def B():
    A()

def C():
    A()

def D():
    B()
    C()

cProfile.run('D()','profileResults.prf')
Run Code Online (Sandbox Code Playgroud)

蛇可视化结果

Nic*_*mer 7

不幸的是,Python 配置文件不存储整个调用树。(这太昂贵了。)我已经在这里记录了这个问题,并作为一个蛇维兹问题

我最近创建了用于可视化 Python 配置文件的tuna,以解决其中一些问题。tuna无法显示整个调用树,但至少它也不会显示错误信息。

安装与

pip3 install tuna
Run Code Online (Sandbox Code Playgroud)

创建运行时配置文件

python -m cProfile -o program.prof yourfile.py
Run Code Online (Sandbox Code Playgroud)

然后在文件上运行 tuna

tuna program.prof
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述