最近我正在研究 Python 中的并行编程工具。这是 os.pipe 和 multiprocessing.Pipe 之间的两个主要区别。(尽管它们被使用的场合)
- os.pipe是单向,multiprocessing.Pipe是双向;
- 将东西放入管道/从管道接收东西时,os.pipe 使用编码/解码,而 multiprocessing.Pipe 使用pickle/unpickle
我想知道我的理解是否正确,还有其他区别吗?谢谢。
最佳答案
我相信你所说的一切都是正确的。
在 Linux 上,os.pipe
只是一个用于访问传统 POSIX 管道的 Python 接口(interface)。在 Windows 上,它是使用 CreatePipe
实现的。当你调用它时,你会得到两个普通的文件描述符。它是单向的,您只需在一端向它写入字节,然后由内核缓冲,直到有人从另一端读取。它相当低级,至少按照 Python 标准是这样。
multiprocessing.Pipe
对象是更高级的接口(interface),使用 multiprocessing.Connection
对象实现。在 Linux 上,这些实际上是建立在 POSIX 套接字之上的,而不是 POSIX 管道。在 Windows 上,它们是使用 CreateNamedPipe
API 构建的。正如您所指出的,multiprocessing.Connection
对象可以发送/接收任何可 picklable 对象,并将自动处理 pickling/unpickling 过程,而不仅仅是处理字节。它们既可以是双向的,也可以是单向的。
关于Python os.pipe 与 multiprocessing.Pipe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15720120/