要逐行分析程序的内存和时间,我建议使用memory_profiler和line_profiler。
安装:
# Time profiler
$ pip install line_profiler
# Memory profiler
$ pip install memory_profiler
# Install the dependency for a faster analysis
$ pip install psutil
常见的部分是,通过使用各自的装饰器指定要分析的函数。
例子:我有几个函数在我的Python文件main.py,我想分析。其中之一是linearRegressionfit()。我需要使用装饰器@profile,它可以帮助我分析关于时间和内存的代码。
对函数定义进行以下更改
@profile
def linearRegressionfit(Xt,Yt,Xts,Yts):
lr=LinearRegression()
model=lr.fit(Xt,Yt)
predict=lr.predict(Xts)
# More Code
对于时间分析,
Run:
$ kernprof -l -v main.py
输出
Total time: 0.181071 s
File: main.py
Function: linearRegressionfit at line 35
Line # Hits Time Per Hit % Time Line Contents
==============================================================
35 @profile
36 def linearRegressionfit(Xt,Yt,Xts,Yts):
37 1 52.0 52.0 0.1 lr=LinearRegression()
38 1 28942.0 28942.0 75.2 model=lr.fit(Xt,Yt)
39 1 1347.0 1347.0 3.5 predict=lr.predict(Xts)
40
41 1 4924.0 4924.0 12.8 print("train Accuracy",lr.score(Xt,Yt))
42 1 3242.0 3242.0 8.4 print("test Accuracy",lr.score(Xts,Yts))
对于内存剖析,
Run:
$ python -m memory_profiler main.py
输出
Filename: main.py
Line # Mem usage Increment Line Contents
================================================
35 125.992 MiB 125.992 MiB @profile
36 def linearRegressionfit(Xt,Yt,Xts,Yts):
37 125.992 MiB 0.000 MiB lr=LinearRegression()
38 130.547 MiB 4.555 MiB model=lr.fit(Xt,Yt)
39 130.547 MiB 0.000 MiB predict=lr.predict(Xts)
40
41 130.547 MiB 0.000 MiB print("train Accuracy",lr.score(Xt,Yt))
42 130.547 MiB 0.000 MiB print("test Accuracy",lr.score(Xts,Yts))
此外,还可以使用matplotlib using绘制内存分析器结果
$ mprof run main.py
$ mprof plot
注:测试于
Line_profiler version == 3.0.2
Memory_profiler version == 0.57.0
Psutil版本== 5.7.0
编辑:可以使用TAMPPA包解析分析器的结果。使用它,我们可以逐行得到所需的图