13

我有两个打开的文件对象,destsrc. 打开文件对象dest进行写入,将查找位置放置在文件内的某个偏移量处,并打开文件对象src进行读取。我需要做的只是从当前位置读取src到 EOF 并dest尽快将内容传输到。

如果我使用 Java 编程,我可以利用该FileChannel#transferTo()方法执行零拷贝文件 I/O。

Python 是否也支持零拷贝?

4

2 回答 2

11

从 3.3 版开始,Python 有了os.sendfile,它与各种 Unix 变体的sendfile(2)零拷贝 I/O 接口相连接。它作用于文件描述符,而不是一般的类文件对象。对于较旧的 Python,有py-sendfile

于 2011-09-17T16:39:35.627 回答
1

从 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)。

于 2020-12-29T12:04:15.213 回答