请原谅我的这个天真的问题。我试图监视我的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会返回下表。
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
答案 0 :(得分:0)
行之间的内存差异在第二列中给出,或者您可以编写一个小脚本来处理输出。
答案 1 :(得分:0)
根据the docs:
第一列表示已分析的代码的行号,第二列(Mem usage)表示执行该行后Python解释器的内存使用情况。第三列(递增)表示当前行相对于最后一行的内存差异。
因此,8.2 MiB是第一行执行后的内存使用量。这包括启动Python,加载脚本及其所有导入(包括memory_profiler
本身)所需的内存,等等。
似乎没有任何记录的选项可以从每个条目中删除它。但是对结果进行后期处理并不会太难。
或者,你真的需要这样做吗?第三列显示了在每一行之后使用了多少额外内存,并且它或者在一系列行中的总和,似乎比每行第二列和开头之间的差异更有趣。 / p>