我有两个打开的文件对象,dest和src。打开文件对象dest以进行写入,并将查找位置放置在文件内的某个偏移处,并且打开文件对象src以进行读取。我需要做的只是从src中的当前位置读取到EOF,并尽快将内容传输到dest。
如果我用Java语言编程,我可以利用FileChannel#transferTo()方法来执行零拷贝文件I/O。
Python也支持零拷贝吗?
发布于 2011-09-18 00:39:36
从3.3版本开始,Python就有了os.sendfile,它可以连接到各种Unix变体的sendfile(2)零拷贝I/O接口。它对文件描述符进行操作,而不是对一般的类似文件的对象进行操作。对于较老的蟒蛇,有py-sendfile。
发布于 2020-12-29 20:04:15
从Python3.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 (从Python3.8开始)可以做到这一点。请参阅issue 37159 (Use copy_file_range() in shutil.copyfile()) (可能是Python3.9或3.10)。
https://stackoverflow.com/questions/7456181
复制相似问题