繁体   English   中英

解释python memory_profiler的输出

[英]Interpreting the output of python memory_profiler

请原谅我这个天真的问题。 我正在尝试监视python代码的内存使用情况,并且遇到了很有前途的memory_profiler程序包。 我对解释@profile装饰器生成的输出有疑问。

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

虚拟的

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将返回下表。

行#内存使用量增加行内容

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

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

努申

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

根据文档

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM