我有两个打开的文件对象,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
文档。或者发布33671(shutil.copy*函数(Linux、OSX和Win(的高效零拷贝(。以及相应的(合并的(拉取请求。
您可能还对写时拷贝支持或服务器端拷贝支持感兴趣。看这里,看这里。os.copy_file_range
(从Python 3.8开始(可以做到这一点。请参阅问题37159(在shutil.copyfile((中使用copy_file_range((((可能是Python 3.9或3.10(。