如何使用Python内存分析器查找内存使用情况?

sln*_*sln 2 python python-3.x

在这个问题的最后我找到了一些代码。为了方便起见,我将其放在这里:

import memory_profiler as mp

def fun(n):
    tmp = []
    for i in range(n):
        tmp.extend(list(range(i*i)))
    return "XXXXX"

start_mem = mp.memory_usage(max_usage=True)
res = mp.memory_usage(proc=(fun, [100]), max_usage=True, retval=True) 
print('start mem', start_mem)
print('max mem', res[0][0])
print('used mem', res[0][0]-start_mem)
print('fun output', res[1])
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为 res 不是双精度数组,它是浮点数。此外,我不明白如何检查许多函数的内存使用情况。我的意思是,像这样的东西会起作用吗?

import memory_profiler as mp

def fun1(n):
    return "XXXXX"
def fun2(n):
    return "YYYYY"

methods = [
    'fun1(n)',
    'fun2(n)',
    ]

start_mem = mp.memory_usage(max_usage=True)
res = mp.memory_usage(proc=(methods[0], [100]), max_usage=True, retval=True) 
print('start mem', start_mem)
print('max mem', res[0][0])
print('used mem', res[0][0]-start_mem)
print('fun output', res[1])
Run Code Online (Sandbox Code Playgroud)

Pra*_*Raj 5

安装内存分析器:

\n
pip3 install -U memory_profiler\n
Run Code Online (Sandbox Code Playgroud)\n

有时,将完整的内存使用情况报告作为外部进程(无论是否是 Python 脚本)的时间函数(而不是逐行)很有用。在这种情况下,可执行文件 mprof 可能有用

\n

要获取逐行分析,请在 def 函数前面添加装饰器 \xe2\x80\x98@profile\xe2\x80\x99 。

\n
from memory_profiler import profile\n@profile\ndef my_func():\n    a = [1] * (10 ** 6)\n    b = [2] * (2 * 10 ** 7)\n    del b\n    return a\n\nif __name__ == '__main__':\n    my_func()\n
Run Code Online (Sandbox Code Playgroud)\n

之后保存 .py 文件并在终端中运行以下代码。

\n
mprof run perf_test_v1.py\n
Run Code Online (Sandbox Code Playgroud)\n

这将向您显示每行代码的内存使用情况。\n通过以下代码绘制内存使用情况与时间的关系。

\n
mprof plot\n
Run Code Online (Sandbox Code Playgroud)\n

mprof 的可用命令有:

\n
mprof run: running an executable, recording memory usage\nmprof plot: plotting one the recorded memory usage (by default, the last one)\nmprof list: listing all recorded memory usage files in a user-friendly way.\nmprof clean: removing all recorded memory usage files.\nmprof rm: removing specific recorded memory usage files\n
Run Code Online (Sandbox Code Playgroud)\n

这将帮助您识别代码中的瓶颈并有助于优化步骤。

\n

获取基于时间的内存使用情况

\n

执行将选项 -m memory_profiler 传递给 python 解释器的代码,以加载 memory_profiler 模块并将逐行分析打印到 stdout。如果文件名是 example.py,这将导致:

\n
$ python -m memory_profiler example.py\n
Run Code Online (Sandbox Code Playgroud)\n