Python 支持零拷贝 I/O 吗?

发布于 2024-12-05 06:08:34 字数 444 浏览 0 评论 0原文

我有两个打开的文件对象,destsrc。文件对象 dest 打开用于写入,查找位置放置在文件内的某个偏移处,文件对象 src 打开用于读取。我需要做的只是从 src 中的当前位置读取到 EOF 并将内容尽快传输到 dest 。

如果我用 Java 编程,我可以利用 FileChannel#transferTo() 方法执行零复制文件 I/O。

Python也支持零拷贝吗?

I have two open file objects, dest and src. File object dest is opened for writing, with the seek position placed at some offset within the file, and file object src is opened for reading. What I need to do is simply read from the current position in src to EOF and transfer the contents to dest as quickly as possible.

If I were programming in Java, I could utilize the FileChannel#transferTo() method to perform zero-copy file I/O.

Does Python also support zero-copy?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

2024-12-12 06:08:34

从 3.3 版本开始,Python 有了 os.sendfile ,它连接到各种 Unix 变体的 sendfile(2) 零拷贝 I/O 接口。它对文件描述符进行操作,而不是一般的类文件对象。对于较旧的 Python,有 py-sendfile

Since version 3.3, Python has os.sendfile, which interfaces to various Unix variants' sendfile(2) zero-copy I/O interfaces. It operates on file descriptors, not general file-like objects. For older Pythons, there's py-sendfile.

听风吹 2024-12-12 06:08:34

从 Python 3.8 开始,您可以使用 shutil.copyfile(以及来自 shutil 的其他内容),如果可能的话,它将在内部使用零拷贝,例如 os.sendfile,如果不可能,则回退到简单的读写循环。

请参阅shutil文档了解详细信息。
或者问题 33671(shutil.copy* 函数的高效零拷贝(Linux、OSX 和 Win))
以及相应的(合并的)拉取请求

您可能还对写时复制支持或服务器端复制支持感兴趣。请参阅此处,<一href="https://stackoverflow.com/questions/65492932/ficlone-vs-ficlonerange-vs-copy-file-range-for-copy-on-write-support">此处
os.copy_file_range (自 Python 3.8 起)就可以做到这一点。请参阅问题37159(在shutil.copyfile()中使用copy_file_range())(可能是Python 3.9或3.10) 。

Since Python 3.8, you can use shutil.copyfile (and others from shutil) which will internally use zero-copy if possible, such as os.sendfile, and if not possible, fall back to a simple read-write loop.

See the shutil docs for details.
Or issue 33671 (Efficient zero-copy for shutil.copy* functions (Linux, OSX and Win)).
And the corresponding (merged) pull request.

You might also be interested in copy-on-write support or server-side copy support. See here, here.
The os.copy_file_range (since Python 3.8) would do that. See issue 37159 (Use copy_file_range() in shutil.copyfile()) (maybe Python 3.9 or 3.10).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文