2017-07-26 81 views
1

我使用Memory Profiler模块来获取我的python代码的内存使用情况如下this答案。但是,我无法解释%memit magic的输出(或者使用来自模块的@profile装饰器的输出或mprof run的输出)。试图理解python内存配置文件

例如,

%memit range(10000) 

给我peak memory: 97.41 MiB, increment: 0.24 MiB

同时,

%memit xrange(10000) 

显示peak memory: 97.46 MiB, increment: 0.00 MiB。我确实了解xrange返回xrange type之间的差异,而不是range()返回列表。我在这里用它们来演示这两种情况。

我的问题是

  1. 是什么peak memoryincrement实际上意味着什么呢?
  2. 我应该如何报告此输出中脚本(或函数)的总内存使用情况?
+0

迂腐nitpick:'xrange'不返回一个发电机。 –

+0

@ juanpa.arrivillaga:修正了它:D – Unni

回答

3

峰值内存是指程序运行期间系统峰值内存使用率(包括其他进程的内存使用量)。

增量是程序运行之前相对于内存使用量的内存使用增量(即increment = peak memory-starting memory)。

所以你会报告increment。峰值内存只是帮助您计算在程序运行期间使用所有RAM的距离。

如果你指的是行由行示例自述的使用部分:

Line # Mem usage Increment Line Contents 
============================================== 
    3       @profile 
    4  5.97 MB 0.00 MB def my_func(): 
    5  13.61 MB 7.64 MB  a = [1] * (10 ** 6) 
    6 166.20 MB 152.59 MB  b = [2] * (2 * 10 ** 7) 
    7  13.61 MB -152.59 MB  del b 
    8  13.61 MB 0.00 MB  return a 

%memit基本上给你从管线6的存储器使用量,但增量相对于第4行报告(实际上是第1行,但据推测,第1-3行没有计算)。

+0

谢谢!那是我猜测的。但我仍然想确定。 – Unni