如何逐行分析Python代码?

26 浏览
0 Comments

如何逐行分析Python代码?

我一直在使用cProfile来对我的代码进行性能分析,效果非常好。我还使用gprof2dot.py来可视化结果(使得结果更清晰)。

然而,cProfile(以及我迄今为止见过的大多数其他Python性能分析器)似乎只能对函数调用进行分析。当某些函数从不同的地方调用时,这会导致混淆 - 我不知道是调用#1还是调用#2占用了大部分时间。当所涉及的函数嵌套六层,从七个其他地方调用时,情况变得更糟。

如何进行逐行的性能分析?

而不是这样:

函数 #12,总时间:2.0秒

我想看到类似于这样的信息:

函数 #12(由somefile.py:102调用)0.5秒
函数 #12(由main.py:12调用)1.5秒

cProfile确实显示了多少时间“传递”给了父函数,但是当你有一堆层级和相互调用时,这种连接就丢失了。

理想情况下,我希望有一个GUI能够解析数据,然后显示给我源文件,并给每行一个总时间。类似于这样:

main.py:
a = 1 # 0.0秒
result = func(a) # 0.4秒
c = 1000 # 0.0秒
result = func(c) # 5.0秒

然后,我就可以点击第二个“func(c)”调用,查看在该调用中占用时间的部分,与“func(a)”调用分开。这样说得通吗?

0