2

请原谅我这个幼稚的问题。我正在尝试监视我的 python 代码的内存使用情况,并且遇到了有前途的memory_profiler包。我有一个关于解释@profile 装饰器生成的输出的问题。

这是我通过运行下面的虚拟代码获得的示例输出:

假人.py

from memory_profiler import profile

@profile
def my_func():
   a = [1] * (10 ** 6)
   b = [2] * (2 * 10 ** 7)
   del b
   return a

if __name__ == '__main__':
   my_func()

通过“python dummy.py”调用 dummy.py 会返回下表。

Line # Mem 使用增量行内容

 3      8.2 MiB      0.0 MiB   @profile
 4                             def my_func():
 5     15.8 MiB      7.6 MiB       a = [1] * (10 ** 6)
 6    168.4 MiB    152.6 MiB       b = [2] * (2 * 10 ** 7)
 7     15.8 MiB   -152.6 MiB       del b
 8     15.8 MiB      0.0 MiB       return a

我的问题是表格第一行中的 8.2 MiB 对应什么。我的猜测是它是 python 解释器本身的初始内存使用;但我不确定。如果是这种情况,有没有办法让这个基线使用量自动从脚本的内存使用量中减去?

非常感谢您的时间和考虑!

能心

4

2 回答 2

3

根据文档

第一列表示已分析代码的行号,第二列(内存使用情况)表示执行该行后 Python 解释器的内存使用情况。第三列(增量)表示当前行相对于最后一行的内存差异。

因此,8.2 MiB 是执行第一行后的内存使用量。这包括启动 Python、加载脚本及其所有导入(包括memory_profiler自身)等所需的内存。

似乎没有任何记录在案的选项可以从每个条目中删除它。但是对结果进行后处理不会太难。

或者,你真的需要这样做吗?第三列显示了在每行之后使用了多少额外的内存,或者说,或者跨行的总和,似乎比每行的第二列和开始之间的差异更有趣。

于 2013-12-11T21:44:15.800 回答
0

行之间的内存差异在第二列中给出,或者您可以编写一个小脚本来处理输出。

于 2013-12-11T21:43:29.233 回答