我有两个打开的文件对象,dest
和src
. 打开文件对象dest
进行写入,将查找位置放置在文件内的某个偏移量处,并打开文件对象src
进行读取。我需要做的只是从当前位置读取src
到 EOF 并dest
尽快将内容传输到。
如果我使用 Java 编程,我可以利用该FileChannel#transferTo()
方法执行零拷贝文件 I/O。
Python 是否也支持零拷贝?
我有两个打开的文件对象,dest
和src
. 打开文件对象dest
进行写入,将查找位置放置在文件内的某个偏移量处,并打开文件对象src
进行读取。我需要做的只是从当前位置读取src
到 EOF 并dest
尽快将内容传输到。
如果我使用 Java 编程,我可以利用该FileChannel#transferTo()
方法执行零拷贝文件 I/O。
Python 是否也支持零拷贝?
从 3.3 版开始,Python 有了os.sendfile
,它与各种 Unix 变体的sendfile(2)
零拷贝 I/O 接口相连接。它作用于文件描述符,而不是一般的类文件对象。对于较旧的 Python,有py-sendfile。
从 Python 3.8 开始,您可以使用shutil.copyfile
(以及其他来自shutil
),如果可能,它将在内部使用零拷贝,例如os.sendfile
,如果不可能,则回退到简单的读写循环。
有关详细信息,shutil
请参阅文档。或issue 33671(shutil.copy* 函数的高效零拷贝(Linux、OSX 和 Win))。以及相应的(合并的)拉取请求。
您可能还对写时复制支持或服务器端复制支持感兴趣。看这里,这里。(os.copy_file_range
从 Python 3.8 开始)会这样做。请参阅问题 37159(在 shutil.copyfile() 中使用 copy_file_range())(可能是 Python 3.9 或 3.10)。