是否可以在不刷新其内容的情况下关闭memmap的临时文件?

时间:2018-07-06 14:20:56

标签: python numpy numpy-memmap

用例:巨大的图像处理。当中间数据集超出物理内存时,我将使用内存映射的临时文件。完成中间结果后,无需将中间结果存储到磁盘。当我删除它们时,numpy似乎先将所有内容刷新到磁盘,然后从文件系统中删除该文件。刷新使I / O资源和文件系统负担沉重,据我了解,鉴于此后才删除文件,从逻辑上讲是不必要的。

是否可以在不刷新其内容的情况下关闭memmap的临时文件?

1 个答案:

答案 0 :(得分:2)

您需要使用c模式以写时复制的形式打开内存映射。来自numpy.memmap documentation

mode : {'r+', 'r', 'w+', 'c'}, optional
     

在这种模式下打开文件:

'r'     Open existing file for reading only.
'r+'    Open existing file for reading and writing.
'w+'    Create or overwrite existing file for reading and writing.
'c'     Copy-on-write: assignments affect data in memory, but changes 
        are not saved to disk. The file on disk is read-only.
     

默认值为'r+'

因此默认设置是允许进行读写,但是以这种方式更改内存映射文件确实会导致所有更改都被写回。可以随时进行刷新更改,但是当您关闭它时肯定会进行刷新。

当您使用c作为模式时,更改将导致(透明地)复制更改的页面,并且当您关闭文件时,受影响的页面将再次被丢弃。

请注意,当您写入足够的页面时,操作系统将必须将内存页面交换到磁盘。这与使用超过可用内存的任何其他进程没有什么不同。关闭映射文件后,所有此类复制的页面(交换到磁盘或仍在内存中)都将再次丢弃。