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