添加许多Numpy阵列以列出非常慢的

时间:2015-08-03 11:32:56

标签: python arrays performance numpy garbage-collection

我在磁盘上保存了大约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时,我发现我现在每隔几分钟才会添加到列表中。

enter image description here

我在Redhat上使用的是Anaconda Python 2.7,而我正在阅读的目录只有半满:

df -h /tmp
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       5.4T  2.5T  2.7T  49% /

有谁知道可能导致性能突然崩溃的原因,或者我可以做些什么来解决它?任何其他人可以提供的帮助将不胜感激!

0 个答案:

没有答案