当memmap数组被垃圾收集时,是否有可能有一个Numpy 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
但似乎没有保留对临时文件的引用,因此将其删除。
我不想在临时文件上使用上下文管理器,因为我希望能够从函数返回数组并使文件存活直到不再使用该数组。
NB:类似的问题:In Python, is it possible to overload Numpy's memmap to delete itself when the memmap object is no longer referenced?但是提问者对Python范围和tempfile模块的了解很少。
答案 0 :(得分:0)
事实证明,jtaylor's answer对原始链接的问题是正确的。所以代码:
import tempfile
import numpy as np
with tempfile.NamedTemporaryFile() as ntf:
temp_name = ntf.name
arr = np.memmap(ntf, mode='w+',
shape=(10, 10), dtype=np.int)
print(arr)
由于操作系统管理文件的方式,即使os.path.exists(temp_name)
为false,也可以按需运行。文件路径(temp_name
)已取消链接,不再可通过文件系统访问,但实际文件磁盘使用率将保持可用,直到打开文件关闭,memmap对象将保留该文件。