multiprocessing.Pipe()与.Queue()

时间:2018-12-25 11:44:06

标签: python-3.x queue multiprocessing

i

import multiprocess as mp mp.Pipe()之间的主要区别是什么?它们对我来说似乎是相同的:基本上mp.Queue()等效于Pipe.recv(),而Queue.get()等于Pipe.send()

1 个答案:

答案 0 :(得分:0)

它们是完全不同的事物,行为也非常不同。

Queue instance具有putgetemptyfull和其他各种方法。它有一个可选的最大大小(实际上是项目数)。任何人都可以将队列放入或放入任何队列。它处理所有锁定,因此是过程安全的。

Pipe function(请注意,这是一个函数而不是类实例)将返回两个Connection类型的对象(这些是类实例)。这两个实例相互连接。它们之间的连接可以是单双工的,即您只能在一个上发送,而只能在另一个上进行接收,也可以是全双工的,即您在一个上实际发送的任何内容都可以在另一个上接收。这两个对象具有sendrecvsend_bytes, recv_bytesfilenoclose方法。由于实际的数据传输是通过字节流进行的,所以发送和接收方法使用酸洗代码在对象和字节之间进行转换。连接对象是 not 锁定的,因此 not 过程安全的。

进程之间的数据传输通常使用以下Connection对象:this和共享内存是多处理代码中所有进程间通信的基础机制。 Queue实例是更高级别的对象,最终需要使用Connection来发送或接收表示正在跨队列传输的对象的字节流。因此,从某种意义上讲,它们执行相同的操作,但这有点像说USB电缆与连接它们的功能相同。通常,您不想处理电线上的单个电压:仅发送或接收整个对象会更好。 (这种类比有点弱,因为Connection实例具有sendrecv以及send_bytesrecv_bytes,但是它可能仍然有用。) / p>