内存分析工具 Memory Profiler 是基于 psutil 的代码内存占用的监视工具,也可以逐行分析 python 代码的内存占用情况(line-by-line memory usage).
安装:
pip install -U memory_profiler
1. 逐行内存占用
在代码脚本外使用.
类似于 line_profiler 所采用的方式,首先,使用 @profile
装饰要分析的函数;然后,使用特定脚本运行代码.
如:
@profile
def my_func():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del b
return a
if __name__ == '__main__':
my_func()
运行:
python -m memory_profiler example.py
输出如:
Line # Mem usage Increment Occurences Line Contents
============================================================
3 38.816 MiB 38.816 MiB 1 @profile
4 def my_func():
5 46.492 MiB 7.676 MiB 1 a = [1] * (10 ** 6)
6 199.117 MiB 152.625 MiB 1 b = [2] * (2 * 10 ** 7)
7 46.629 MiB -152.488 MiB 1 del b
8 46.629 MiB 0.000 MiB 1 return a
其中,
第一列表示分析代码的行数;
第二列(Mem usage)表示执行完该行代码后 Python 解释器的内存使用;
第三列(Increment) 表示当前行和最后一行的内存占用差值;
第四列(Line Contents) 打印了待分析的代码.
2. 装饰器(Decorator)
在代码内使用.
from memory_profiler import profile
@profile
#@profile(precision=4) 指定小数位.
def my_func():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del b
return a
运行:
python example.py