Python支持零拷贝I/O吗?

13
我有两个打开的文件对象,destsrc。文件对象dest以写模式打开,并将偏移量设置为文件内的某个位置,而文件对象src以读模式打开。我需要做的就是从src的当前位置读取到文件结尾,并尽可能快地将内容传输到dest
如果我使用Java编程,我可以利用FileChannel#transferTo()方法进行零拷贝文件I/O。
Python是否也支持零拷贝呢?
2个回答

11
自从版本3.3以来,Python有了os.sendfile。它与各种Unix变体的sendfile(2)零拷贝I/O接口进行交互。它基于文件描述符,而不是通用的类文件对象。对于旧版本的Python,可以使用py-sendfile

1
自 Python 3.8 起,您可以使用 shutil.copyfile(以及其他来自 shutil 的函数),它们会在可能的情况下内部使用零拷贝,例如 os.sendfile,如果不可能,则退回到简单的读写循环。
有关详细信息,请参见 shutil 文档。 或者请查看 33671 号问题(Linux、OSX 和 Win 上有效的零拷贝 shutil.copy* 函数)。 以及 相应的(已合并的)拉取请求

您可能还对写时复制支持或服务器端复制支持感兴趣。请参见这里这里os.copy_file_range(自Python 3.8起)可以实现此功能。请参见问题37159(在shutil.copyfile()中使用copy_file_range())(可能是Python 3.9或3.10)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接