使用LineProfiler,可显示每行代码的运行时间,以及时间占比,也可分析总的运行时间,。
首先,导入所需的模块:
from line_profiler import LineProfiler
然后,确定需要分析的代码
# 假设之前已经创建了MyClass,并且定义了my_method以及其他用到的函数,下面开始分析过程
# analyze the code performance
profiler = LineProfiler() # 创建LineProfiler对象
profiler.add_function(MyClass.my_method)
# 上面这一句是添加要分析的函数,这里不需要给出参数,也不实际运行函数,如果还想检测其他的函数或者方法,在下面接着add就可以,比如下面这两行。
profiler.add_function(funcition_1)
profiler.add_function(funcition_2)
profiler.enable_by_count() # 使能检测
MyClass.my_method(para1, para2) # 这一句相当于调用函数/方法,运行功能,进行逐行的检测。
profiler.disable_by_count() # 检测结束
profiler.print_stats() # 打印每一行的时间。
注意:打印的内容中包括MyClass.my_method(para1, para2)每行的运行时间,也包括add_function的函数的每行运行时间。
但是如果add_function中对应的函数/方法,在profiler.enable_by_count()与profiler.disable_by_count()之间的MyClass.my_method(para1, para2)这一行的运行过程中没有实际被调用,只是被增加到了add_function中,那么其实打印出来是没有时间的。
如果想逐行显示MyClass.my_method(para1, para2)执行过程中被调用的函数/方法的每一行的运行时间,把方法或者函数的名称增加到add_function中即可。
总结:
实际上,只要保证你想逐行看时间的函数/方法既被增加到了add_function中,并且也在profiler.enable_by_count()与profiler.disable_by_count()之间的部分中被调用,就可以看到逐行运行的时间。
保存line_profiler的结果:
(1)在代码最后加上:profiler.dump_stats('line_profiler_results.lprof'),将结果存储到lprof文件中
(2)在终端中输入命令行,解析lprof文件内容存储到txt文件中:
python -m line_profiler line_profiler_results.lprof > results.txt
line_profiler的输出结果解释:
https://www.cnblogs.com/tian777/p/17785674.html
代码运行的可视化分析:
https://medium.com/@narenandu/profiling-and-visualization-tools-in-python-89a46f578989