Python os.pipe与multiprocessing.Pipe

时间:2013-03-30 15:22:40

标签: python multithreading multiprocessing pipe communication

最近我正在研究Python中的并行编程工具。这是os.pipe和multiprocessing.Pipe之间的两个主要区别。(尽管有使用它们的场合)

  1. os.pipe 单向,多处理。管道双向;
  2. 当把东西放入管道/从管道接收东西时,os.pipe使用编码/解码,而multiprocessing.Pipe使用 pickle / unpickle
  3. 我想知道我的理解是否正确,还有其他区别吗?谢谢。

1 个答案:

答案 0 :(得分:6)

我相信你所说的一切都是正确的。

在Linux上,os.pipe只是用于访问传统POSIX管道的Python接口。在Windows上,它是使用CreatePipe实现的。当你调用它时,你会得到两个普通的文件描述符。它是单向的,你只需在一端写入字节,由内核缓冲,直到有人从另一端读取。这是相当低级的,至少是Python标准。

multiprocessing.Pipe个对象是更高级别的接口,使用multiprocessing.Connection个对象实现。在Linux上,这些实际上是建立在POSIX套接字之上,而不是POSIX管道。在Windows上,它们是使用CreateNamedPipe API构建的。正如您所指出的,multiprocessing.Connection对象可以发送/接收任何可选择的对象,并且将自动处理pickle / unpickling过程,而不仅仅是处理字节。它们既可以是双向的,也可以是单向的。