内存分析工具 Memory Profiler 是基于 psutil 的代码内存占用的监视工具,也可以逐行分析 python 代码的内存占用情况(line-by-line memory usage).

pypi: https://pypi.org/project/memory-profiler/

安装:

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
Last modification:April 13th, 2021 at 09:09 am