我正在使用一个简单的numpy.dtype
数组,我使用numpy.savez
和numpy.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。不知道为什么会这样。有没有办法'回收'这段记忆?