我正在使用Python进行分析cProfile.我发现一个占用大量CPU时间的函数.我如何找出哪个函数调用这个重函数最多?
编辑:
我会解决一个解决方法:我可以在那个重函数中编写一个Python行,它将打印调用它的函数的名称吗?
dbr*_*dbr 106
我几乎总是使用Gprof2dot查看cProfile模块的输出,基本上它将输出转换为graphvis图(.dot文件),例如:
它可以很容易地确定哪个函数最慢,哪个函数调用它.
用法是:
python -m cProfile -o output.pstats path/to/your/script arg1 arg2
gprof2dot.py -f pstats output.pstats | dot -Tpng -o output.png
Run Code Online (Sandbox Code Playgroud)
Nad*_*mli 34
这可能不会直接回答你的问题,但肯定会有所帮助.如果使用带有选项--sort cumulative的探查器,它将按累计时间对函数进行排序.这不仅有助于检测繁重的功能,还可以检测调用它们的功能.
python -m cProfile --sort cumulative myScript.py
Run Code Online (Sandbox Code Playgroud)
有一个解决方法来获取调用函数:
import inspect
print inspect.getframeinfo(inspect.currentframe().f_back)[2]
Run Code Online (Sandbox Code Playgroud)
您可以根据需要添加任意数量的f_back,以防您需要调用者调用者等.如果您想计算频繁调用,可以执行以下操作:
record = {}
caller = inspect.getframeinfo(inspect.currentframe().f_back)[2]
record[caller] = record.get(caller, 0) + 1
Run Code Online (Sandbox Code Playgroud)
然后按频率顺序打印:
print sorted(record.items(), key=lambda a: a[1])
Run Code Online (Sandbox Code Playgroud)