安装好line_profiler后,就可以开始分析代码了。
具体步骤
显然,我们需要一些可供分析的代码。
- 编写可供分析的代码。
我们将编写一个脚本,用来计算一系列不同大小的包含随机数的矩阵的平方。同时要求对应的线程能休眠几秒钟。待分析的函数需要用@profile
进行标记。
import numpy
import time
@profile
def multiply(n):
A = numpy.random.rand(n, n)
time.sleep(numpy.random.randint(0, 2))
return numpy.matrix(A) ** 2
for n in 2 ** numpy.arange(0, 10):
multiply(n)
- 对代码进行分析。
使用line_profiler分析代码时,键入如下命令。
$ kernprof.py -l -v mat_mult.py
Wrote profile results to mat_mult.py.lprof
Timer unit: 1e-06 s
File: mat_mult.py
Function: multiply at line 4
Total time: 3.19654 s
Line # Hits Time Per Hit % Time Line Contents
==============================================================
4 @profile
5 def multiply(n):
6 10 13461 1346.1 0.4 A = numpy.random.rand(n, n)
7 10 3000689 300068.9 93.9 time.sleep(numpy.random.randint(0, 2))
8 10 182386 18238.6 5.7 return numpy.matrix(A) ** 2
攻略小结
修饰符@profile
的作用是告诉line_profile,哪个函数需要分析。下表对line_profile的输出项目进行了解释。
列 | 描述 |
---|---|
Line # |
脚本文件中的行号 |
Hits |
单行代码的执行次数 |
Time |
执行单行代码花费的总时间 |
Per Hit |
单次执行某行代码的平均时间 |
% Time |
执行单行代码花费的时间在所有行的总执行时间中占的百分比 |
Line Contents |
单行代码的内容 |