我一直在使用cProfile来剖析我的代码,并且它一直在很好地工作。我还使用gprof2dot.py来显示结果(使其更清晰一些)。如何逐行分析python代码?
但是,cProfile(以及目前为止我所见过的大多数其他Python配置文件)似乎只能在函数调用级别进行配置。当某些功能从不同的地方被调用时,这会引起混淆 - 我不知道1号或2号呼叫是否占用大部分时间。当所讨论的功能是6个层次时,这会变得更糟,从另外7个地方调用。
所以我的问题是:如何获得一行一行的分析?取而代之的是:
function #12, total time: 2.0s
我希望看到这样的事情:
function #12 (called from somefile.py:102) 0.5s
function #12 (called from main.py:12) 1.5s
CPROFILE并展示了如何的总时间要“转让”给父母,但这又连接丢失当你有一堆层和相互联系的电话。
理想情况下,我很想有一个可以解析数据的GUI,然后向我展示我的源文件,并给出每行的总时间。事情是这样的:
main.py:
a = 1 # 0.0s
result = func(a) # 0.4s
c = 1000 # 0.0s
result = func(c) # 5.0s
然后,我可以点击第二个“FUNC(三)”打电话,看看有什么占用时间在这一号召,从“FUNC(一)”呼叫分开。
这有道理吗?是否有任何分析库收集此类信息?有没有我错过的一些很棒的工具?任何反馈意见。谢谢!!
我的猜测是,你会感兴趣的'pstats.print_callers'。一个例子是[这里](http://www.doughellmann.com/PyMOTW/profile/)。 – 2010-10-13 20:18:59
穆罕默德,这绝对有帮助!至少它解决了一个问题:根据原点分离函数调用。我认为乔金顿的答案更接近我的目标,但print_callers()肯定会让我获得一半。谢谢! – rocketmonkeys 2010-10-14 15:25:25