【发布时间】:2017-06-22 05:42:49
【问题描述】:
是否有可能有一个 Numpy memmap 文件,当 memmap 数组被垃圾回收时,该文件将被删除?
我试过了:
import tempfile
import numpy as np
arr = np.memmap(tempfile.NamedTemporaryFile(), mode='w+',
shape=(10, 10), dtype=np.int)
os.path.exists(arr.filename) # False
但似乎没有保留对临时文件的引用,因此被删除了。
我不想在临时文件上使用上下文管理器,因为我希望能够从函数返回数组并让文件一直存在,直到不再使用数组。
注意:这里有类似的问题:In Python, is it possible to overload Numpy's memmap to delete itself when the memmap object is no longer referenced?,但提问者对 Python 范围和 tempfile 模块的了解不足。
【问题讨论】:
-
看起来
tempfile和memmap之间存在一些棘手的交互。如果先创建临时文件,或者我使用自己的文件名,则该文件存在,os.path和操作系统文件管理器都存在。以您的方式创建文件可能不存在于内存缓冲区之外。还可以使用delete=False进行实验。 -
您对链接 SO 的简短讨论似乎回答了您的问题。这一切都与操作系统的交互以及
tempfile如何创建文件有关。
标签: python numpy mmap temporary-files