在Python中分析:谁称这个函数?

我使用cProfile在Python中进行cProfile 。 我发现一个需要很多CPU时间的功能。 如何找出哪个函数最重要的是调用这个重函数?

编辑:

我会解决一个解决方法:我可以在这个沉重的函数中写一个Python行,它会打印调用它的函数的名字吗?


这可能不会直接回答你的问题,但肯定会有所帮助。 如果使用profiler选项--sort累计,它将按累计时间对函数进行排序。 这不仅有助于检测重度功能,而且还可以检测调用它们的功能。

python -m cProfile --sort cumulative myScript.py

有一个解决方法来获取调用者函数:

import inspect
print inspect.getframeinfo(inspect.currentframe().f_back)[2]

您可以根据需要添加任意数量的f_back以防万一您想要呼叫者来电等。如果您想计算经常呼叫,您可以执行此操作:

record = {}

caller = inspect.getframeinfo(inspect.currentframe().f_back)[2]
record[caller] = record.get(caller, 0) + 1

然后按频率顺序打印它们:

print sorted(record.items(), key=lambda a: a[1])

我几乎总是使用Gprof2dot查看cProfile模块的输出,基本上它将输出转换为graphvis图( .dot文件),例如:

例如gprof2dot输出

它可以很容易地确定哪个函数最慢,哪个函数调用它。

用法是:

python -m cProfile -o output.pstats path/to/your/script arg1 arg2
gprof2dot.py -f pstats output.pstats | dot -Tpng -o output.png

inspect.stack()会给你当前的调用者堆栈。

链接地址: http://www.djcxy.com/p/40377.html

上一篇: Profiling in Python: Who called the function?

下一篇: What is a good easy to use profiler for C++ on Linux?