在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
文件),例如:
它可以很容易地确定哪个函数最慢,哪个函数调用它。
用法是:
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