
line_profiler 是一个第三方的模块,需要进行安装才可以使用。它可以统计每行代码的执行次数和执行时间等,时间单位为微妙。
安装:
(.venv) PS D:\code\vscode\py> pip install line-profiler
PS: 如果是windows下,可能安装会有点小麻烦,不过之前安装相关的加密解密库的时候已安装处理,应该也没什么大问题。主要是需要安装C++ 编译器。以前通常就是直接的安装一个VC。
@profile
def randomlist(n):
lists = []
l = [random.random() for i in range(n)]
l.sort()
for v in l:
lists.append(v)
return lists
@profile
def randomlist_2():
lists = []
for v in l:
lists.append(v)
@profile
def run():
randomlist(200000)
randomlist_2(200000)
if __name__ == '__main__':
run()
然后通过通过下面的命令获得关于random_sort2函数的逐行描述:
kernprof -l -v .\line_profiler_ceshi.py
PS:
提示相关的程序 运行,运行一下吧。
执行结果:
(.venv) PS D:\code\vscode\py> kernprof -l -v .\line_profiler_ceshi.py
Wrote profile results to line_profiler_ceshi.py.lprof
Timer unit: 1e-07 s
Total time: 0.306481 s
File: .\line_profiler_ceshi.py
Function: randomlist at line 14
Line # Hits Time Per Hit % Time Line Contents
==============================================================
14 @profile
15 def randomlist(n):
16 1 14.0 14.0 0.0 lists = []
17 1 384313.0 384313.0 12.5 l = [random.random() for i in range(n)]
18 1 676791.0 676791.0 22.1 l.sort()
19 200001 967809.0 4.8 31.6 for v in l:
20 200000 1035876.0 5.2 33.8 lists.append(v)
21 1 6.0 6.0 0.0 return lists
PS:如果需要分析多个函数直接的加装饰器就可以
@profile
def foo():
task = []
for a in range(0, 101):
for b in range(0, 101):
if a + b == 100:
task.append((a, b))
return task
@profile
def run():
for item in foo():
pass
if __name__ == '__main__':
run()
import line_profiler
import random
def randomlist(n):
lists = []
l = [random.random() for i in range(n)]
l.sort()
for v in l:
lists.append(v)
return lists
if __name__ == "__main__":
profile = line_profiler.LineProfiler(randomlist) # 把函数传递到性能分析器
profile.enable() # 开始分析
randomlist(200000)
profile.disable() # 停止分析
profile.print_stats() # 打印出性能分析结果
执行的结果是:
Timer unit: 1e-07 s
Total time: 0.292393 s
File: d:/code/vscode/py/line_profiler_ceshi.py
Function: randomlist at line 15
Line # Hits Time Per Hit % Time Line Contents
==============================================================
15 def randomlist(n):
16 1 12.0 12.0 0.0 lists = []
17 1 375378.0 375378.0 12.8 l = [random.random() for i in range(n)]
18 1 671413.0 671413.0 23.0 l.sort()
19 200001 915280.0 4.6 31.3 for v in l:
20 200000 961843.0 4.8 32.9 lists.append(v)
21 1 5.0 5.0 0.0 return lists
(.venv) PS D:\code\vscode\py>
import random
from line_profiler import LineProfiler
from functools import wraps
# 查询接口中每行代码执行的时间
# 查询接口中每行代码执行的时间
def func_line_time(f):
@wraps(f)
def decorator(*args, **kwargs):
func_return = f(*args, **kwargs)
profile = LineProfiler()
profile.enable() # 开始分析
profile_wrap = profile(f)
profile_wrap(*args, **kwargs)
profile.disable() # 停止分析
profile.print_stats() # 打印出性能分析结果
return func_return
return decorator
@func_line_time
def randomlist(n):
lists = []
l = [random.random() for i in range(n)]
l.sort()
for v in l:
lists.append(v)
return lists
if __name__ == "__main__":
randomlist(200000)
输出结果:
Timer unit: 1e-07 s
Total time: 0.299915 s
File: d:/code/vscode/py/line_profiler_ceshi.py
Function: randomlist at line 34
Line # Hits Time Per Hit % Time Line Contents
==============================================================
34 @func_line_time
35 def randomlist(n):
36 1 15.0 15.0 0.0 lists = []
37 1 374605.0 374605.0 12.5 l = [random.random() for i in range(n)]
38 1 696941.0 696941.0 23.2 l.sort()
39 200001 947125.0 4.7 31.6 for v in l:
40 200000 980459.0 4.9 32.7 lists.append(v)
41 1 6.0 6.0 0.0 return lists
(.venv) PS D:\code\vscode\py>
多个函数需要函数的示例:
'''
Author: 小钟同学
objectDescription: 项目描述
Date: 2021-03-05 14:07:13
LastEditors: 308711822@qq.com
LastEditTime: 2021-03-05 15:01:25
FilePath: \py\line_profiler_ceshi.py
Version: 1.0
'''
import random
from line_profiler import LineProfiler
from functools import wraps
# 查询接口中每行代码执行的时间
# 查询接口中每行代码执行的时间
def func_line_time(f):
@wraps(f)
def decorator(*args, **kwargs):
func_return = f(*args, **kwargs)
profile = LineProfiler()
profile.enable() # 开始分析
profile_wrap = profile(f)
profile_wrap(*args, **kwargs)
profile.disable() # 停止分析
profile.print_stats() # 打印出性能分析结果
return func_return
return decorator
@func_line_time
def randomlist(n):
lists = []
l = [random.random() for i in range(n)]
l.sort()
for v in l:
lists.append(v)
return lists
@func_line_time
def randomlist_324234(n):
lists = []
l = [random.random() for i in range(n)]
l.sort()
for v in l:
lists.append(v)
return lists
if __name__ == "__main__":
randomlist(200000)
randomlist_324234(454353)
https://testerhome.com/topics/21411
https://www.cnblogs.com/c-x-a/p/10264490.html
https://blog.csdn.net/qq_36097393/article/details/83574269
部分的图或资料来互联网收集整理,如有侵权,烦请联系,我会立即进行删除。
纯属个人实践中相关经验之谈,如有纰漏,还希望大佬们多多提点!
小钟同学 | 文 【原创】| QQ:308711822
原文作者:程序员小钟同学;如有侵权,请联系管理员删除。