不确定为什么在`top`中看到的内存使用是不直观的

时间:2015-10-12 14:02:51

标签: python numpy memory

我正在使用一个简单的numpy.dtype数组,我使用numpy.saveznumpy.load方法将数组保存到磁盘并从磁盘读取。在存储和加载阵列期间,“顶部”所示的内存使用量似乎不应该是它应该是什么样的。以下是演示此内容的示例代码。

import sys
import numpy as np
import time

RouteEntryNP = np.dtype([('final', 'u1'), ('prefix_len', 'u1'),
                        ('output_idx', '>u4'), ('children', 'O')])

a = np.zeros(1000000, RouteEntryNP)

time.sleep(10)

print(sys.getsizeof(a))
with open('test.np.npz', 'wb+') as f:
    np.savez(f, a=a)

while True:
    time.sleep(10)

程序从内存使用量25M开始 - 稍微接近直觉 - RouteEntryNP成员的实际大小为14个字节 - 因此25M更接近直觉。但是当数据被写入文件时 - 内存使用量大约达到250M。

加载文件时会出现类似的行为,在这种情况下,内存使用率最高可达160M,而显式gc.collect()似乎也没有帮助。我正在阅读文件的方式如下。

import numpy as np
np.load('test.np.npz')
import gc
gc.collect()

内存使用量保持在@ 160M。不知道为什么会这样。有没有办法'回收'这段记忆?

0 个答案:

没有答案