Python支持零拷贝I/O吗



我有两个打开的文件对象,destsrc。文件对象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文档。或者发布33671(shutil.copy*函数(Linux、OSX和Win(的高效零拷贝(。以及相应的(合并的(拉取请求。

您可能还对写时拷贝支持或服务器端拷贝支持感兴趣。看这里,看这里。os.copy_file_range(从Python 3.8开始(可以做到这一点。请参阅问题37159(在shutil.copyfile((中使用copy_file_range((((可能是Python 3.9或3.10(。

最新更新