line_profiler,Python代码性能分析库
工作中某些函数运行特别慢,但用普通的性能分析工具只能看到函数级别的统计,无法定位到具体哪行代码是性能瓶颈。line_profiler,它能精确到每一行代码的执行时间,让性能优化工作变得简单高效。
通过使用line_profiler,可以:
- 精确定位代码瓶颈
- 量化优化效果
安装和配置
1 | pip install line_profiler - i http: / / mirrors.aliyun.com / pypi / simple / - - trusted - host mirrors.aliyun.com |
安装完成后,会得到两个命令行工具:kernprof和line_profiler。kernprof用于收集性能数据,而line_profiler用于分析结果。
基本用法
line_profiler的使用方法非常优雅。只需要用@profile装饰器标记要分析的函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 | from line_profiler.explicit_profiler import profile @profile def slow_function(): result = [] for i in range ( 10000 ): result.append(i * * 2 ) return sum (result) if __name__ = = '__main__' : slow_function() |
在命令行运行:
1 | kernprof - l - v test.py |
Total time:当前函数的时间消耗,单位是秒。
File:当前函数所在文件名。
Function:当前函数的函数名以及在文件中的位置。
Line #:代码所在行号。
Hits:在执行过程中,该行代码执行次数,即命中数。
Time:在执行过程中,该行代码执行的总时间,默认单位是微秒。
Per Hit:在执行过程中,平均每次执行该行代码所耗时间,默认单位是微秒。
% Time:执行该行代码所耗总时间占执行当前函数所耗总时间的百分比。
Line Contents:该行代码的内容。
高级功能
1. 动态分析:除了装饰器方式,还可以在运行时动态分析代码
1 2 3 4 5 6 7 8 9 10 11 12 | from line_profiler import LineProfiler def slow_function(): for i in range ( 100 ): sum ([i * * 2 for i in range ( 100 )]) profiler = LineProfiler() profiler_wrapper = profiler(slow_function) profiler_wrapper() profiler.print_stats() |
2. 多函数分析:可以同时分析多个函数的性能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | from line_profiler import LineProfiler def func1(): for i in range ( 10 ): sum ([i * * 2 for i in range ( 10 )]) def func2(): for i in range ( 20 ): sum ([i * * 2 for i in range ( 20 )]) profiler = LineProfiler() profiler.add_function(func1) profiler.add_function(func2) # 运行并分析 func1 profiler.runcall(func1) profiler.runcall(func2) # 打印统计信息 profiler.print_stats() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人