Python_调试

Python调试工具

line_profile

安装line_profile

pip install line_profile

用法

line_profiler 的使用特别简单,在需要监控的函数前面加上 @profile 装饰器。然后用它提供的 kernprof -l -v [source_code.py] 行进行诊断。以下边的test.py为例,test.py源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
import line_profiler


@profile
def test():
for i in range(100000):
replace_str = "hello world!".replace('world', 'Jhon')
add = 1 + 2 + 3
mul = 1 * 2 * 3


if __name__=='__main__':
test()

然后在终端输入kernprof -l -v test.py即可查看结果, 结果也会保存在test.py.lprof文件中,可以通过python -m line_profiler test.py.lprof再次查看。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ kernprof -l -v test.py
Wrote profile results to test.py.lprof
Timer unit: 1e-06 s

Total time: 0.182565 s
File: test.py
Function: test at line 4

Line # Hits Time Per Hit % Time Line Contents
==============================================================
4 @profile
5 def test():
6 100001 40268.0 0.4 22.1 for i in range(100000):
7 100000 68402.0 0.7 37.5 replace_str = "hello world!".replace('world', 'Jhon')
8 100000 37265.0 0.4 20.4 add = 1 + 2 + 3
9 100000 36630.0 0.4 20.1 mul = 1 * 2 * 3

输出结果中每列的含义如下:

Line #: 行号
Hits: 当前行执行的次数.
Time: 当前行执行耗费的时间,单位为 “Timer unit:”
Per Hit: 平均执行一次耗费的时间.
% Time: 当前行执行时间占总时间的比例.
Line Contents: 当前行的代码

line_profiler 执行时间的估计不是特别精确,不过可以用来分析当前函数中哪些行是瓶颈。

vprof

使用详情见标题链接,
vprof -c cmh "test.py"