我在磁盘上保存了大约50万个numpy数组作为.npy文件。每个列有5列,行数几百到几百万之间。我现在希望在具有3TB RAM的机器上将它们全部读回内存。我的问题是:最快的方法是什么?
我已经尝试在列表推导中使用np.load
,它会非常迅速地运行,直到我的内存达到800 GB以上,此后读取速度几乎变慢了。加载速度似乎没有以线性或几何速度减慢;它只是突然从800 GB点附近的悬崖上掉下来。这是我正在执行的简单代码:
def read_numpy_arrays():
'''Read in all ngram arrays created by the previous stage, and store them in memory of master process'''
gc.disable()
ngram_arrays = [np.load(i) for i in glob.glob("outfiles/*/*/*.npy")]
gc.enable()
return ngram_arrays
我也试过删除垃圾收集行,但这并没有太大的区别。
当我在处理大约10个小时后致电top
时,我发现我现在每隔几分钟才会添加到列表中。
我在Redhat上使用的是Anaconda Python 2.7,而我正在阅读的目录只有半满:
df -h /tmp
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 5.4T 2.5T 2.7T 49% /
有谁知道可能导致性能突然崩溃的原因,或者我可以做些什么来解决它?任何其他人可以提供的帮助将不胜感激!