我有两个打开的文件对象dest
和src
。打开文件对象dest
进行写入,将搜索位置放在文件中的某个偏移处,打开文件对象src
进行读取。我需要做的只是从src
中的当前位置读取到EOF,并尽快将内容传输到dest
。
如果我使用Java编程,我可以使用FileChannel#transferTo()
方法执行零拷贝文件I / O.
Python是否也支持零拷贝?
答案 0 :(得分:7)
从版本3.3开始,Python有os.sendfile
,它与各种Unix变种'sendfile(2)
零拷贝I / O接口接口。它在文件描述符上运行,而不是一般的文件类对象。对于年龄较大的蟒蛇,有py-sendfile。
答案 1 :(得分:0)
从 Python 3.8 开始,您可以使用 shutil.copyfile
(以及来自 shutil
的其他),如果可能,它将在内部使用零复制,例如 os.sendfile
,如果不可能,则回退到一个简单的读写循环。
有关详细信息,请参阅 the shutil
docs。
或issue 33671 (Efficient zero-copy for shutil.copy* functions (Linux, OSX and Win))。
还有the corresponding (merged) pull request。
您可能还对写时复制支持或服务器端复制支持感兴趣。见here、here。
os.copy_file_range
(自 Python 3.8 起)可以做到这一点。请参阅 issue 37159 (Use copy_file_range() in shutil.copyfile())(可能是 Python 3.9 或 3.10)。