gpt4 book ai didi

python - 如何逐行分析 Python 代码?

转载 作者:IT老高 更新时间:2023-10-28 21:07:20 25 4
gpt4 key购买 nike

我一直在使用 cProfile 来分析我的代码,它运行良好。我也用gprof2dot.py将结果可视化(使其更清晰)。

但是,cProfile(以及迄今为止我见过的大多数其他 Python 分析器)似乎只在函数调用级别进行分析。当从不同的地方调用某些函数时,这会导致混淆——我不知道调用 #1 还是调用 #2 占用了大部分时间。当所讨论的函数有六层深,从其他七个地方调用时,情况会变得更糟。

如何获得逐行分析?

而不是这个:

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(c)”调用来查看该调用中占用时间的内容,与“func(a)”调用不同。这有意义吗?

最佳答案

我相信这就是 Robert Kern's line_profiler用于。从链接:

File: pystone.py
Function: Proc2 at line 149
Total time: 0.606656 s

Line # Hits Time Per Hit % Time Line Contents
==============================================================
149 @profile
150 def Proc2(IntParIO):
151 50000 82003 1.6 13.5 IntLoc = IntParIO + 10
152 50000 63162 1.3 10.4 while 1:
153 50000 69065 1.4 11.4 if Char1Glob == 'A':
154 50000 66354 1.3 10.9 IntLoc = IntLoc - 1
155 50000 67263 1.3 11.1 IntParIO = IntLoc - IntGlob
156 50000 65494 1.3 10.8 EnumLoc = Ident1
157 50000 68001 1.4 11.2 if EnumLoc == Ident1:
158 50000 63739 1.3 10.5 break
159 50000 61575 1.2 10.1 return IntParIO

关于python - 如何逐行分析 Python 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3927628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com