解释python memory_profiler的输出

时间:2013-12-11 20:39:13

标签: python memory-profiling

请原谅我的这个天真的问题。我试图监视我的python代码的内存使用情况,并遇到了有希望的memory_profiler包。我有一个关于解释@profile装饰器生成的输出的问题。

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

dummy.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解释器本身的初始内存使用量;但我不确定。如果是这种情况,是否有办法从脚本的内存使用量中自动减去此基线用量?

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

Noushin

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

根据the docs

  

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

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

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

或者,你真的需要这样做吗?第三列显示了在每一行之后使用了多少额外内存,并且它或者在一系列行中的总和,似乎比每行第二列和开头之间的差异更有趣。 / p>