在这个问题的最后我找到了一些代码。为了方便起见,我将其放在这里:
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)
安装内存分析器:
\npip3 install -U memory_profiler\nRun Code Online (Sandbox Code Playgroud)\n有时,将完整的内存使用情况报告作为外部进程(无论是否是 Python 脚本)的时间函数(而不是逐行)很有用。在这种情况下,可执行文件 mprof 可能有用
\n要获取逐行分析,请在 def 函数前面添加装饰器 \xe2\x80\x98@profile\xe2\x80\x99 。
\nfrom 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()\nRun Code Online (Sandbox Code Playgroud)\n之后保存 .py 文件并在终端中运行以下代码。
\nmprof run perf_test_v1.py\nRun Code Online (Sandbox Code Playgroud)\n这将向您显示每行代码的内存使用情况。\n通过以下代码绘制内存使用情况与时间的关系。
\nmprof plot\nRun Code Online (Sandbox Code Playgroud)\nmprof 的可用命令有:
\nmprof 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\nRun Code Online (Sandbox Code Playgroud)\n这将帮助您识别代码中的瓶颈并有助于优化步骤。
\n获取基于时间的内存使用情况
\n执行将选项 -m memory_profiler 传递给 python 解释器的代码,以加载 memory_profiler 模块并将逐行分析打印到 stdout。如果文件名是 example.py,这将导致:
\n$ python -m memory_profiler example.py\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
7125 次 |
| 最近记录: |