具有文件删除功能的 Numpy memmap
Numpy memmap with file deletion
是否可以有一个 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
但似乎没有保留对临时文件的引用,因此被删除了。
我不想在临时文件上使用上下文管理器,因为我希望能够从函数中 return 数组并使文件一直有效,直到不再使用该数组。
注意:这里有类似的问题:In Python, is it possible to overload Numpy's memmap to delete itself when the memmap object is no longer referenced? 但提问者对 Python 作用域和临时文件模块的了解不足。
事实证明,最初链接的问题 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)
为假,但由于 OS 管理文件的方式,可以正常工作。文件路径 (temp_name
) 未链接,无法再通过文件系统访问,但实际文件磁盘使用情况将保持可用,直到打开的文件关闭,memmap 对象将保留。
是否可以有一个 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
但似乎没有保留对临时文件的引用,因此被删除了。
我不想在临时文件上使用上下文管理器,因为我希望能够从函数中 return 数组并使文件一直有效,直到不再使用该数组。
注意:这里有类似的问题:In Python, is it possible to overload Numpy's memmap to delete itself when the memmap object is no longer referenced? 但提问者对 Python 作用域和临时文件模块的了解不足。
事实证明,最初链接的问题 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)
为假,但由于 OS 管理文件的方式,可以正常工作。文件路径 (temp_name
) 未链接,无法再通过文件系统访问,但实际文件磁盘使用情况将保持可用,直到打开的文件关闭,memmap 对象将保留。