i
import multiprocess as mp
和mp.Pipe()
之间的主要区别是什么?它们对我来说似乎是相同的:基本上mp.Queue()
等效于Pipe.recv()
,而Queue.get()
等于Pipe.send()
。
答案 0 :(得分:0)
它们是完全不同的事物,行为也非常不同。
Queue
instance具有put
,get
,empty
,full
和其他各种方法。它有一个可选的最大大小(实际上是项目数)。任何人都可以将队列放入或放入任何队列。它处理所有锁定,因此是过程安全的。
Pipe
function(请注意,这是一个函数而不是类实例)将返回两个Connection
类型的对象(这些是类实例)。这两个实例相互连接。它们之间的连接可以是单双工的,即您只能在一个上发送,而只能在另一个上进行接收,也可以是全双工的,即您在一个上实际发送的任何内容都可以在另一个上接收。这两个对象具有send
,recv
,send_bytes,
recv_bytes
,fileno
和close
方法。由于实际的数据传输是通过字节流进行的,所以发送和接收方法使用酸洗代码在对象和字节之间进行转换。连接对象是 not 锁定的,因此 not 过程安全的。
进程之间的数据传输通常使用以下Connection
对象:this和共享内存是多处理代码中所有进程间通信的基础机制。 Queue
实例是更高级别的对象,最终需要使用Connection
来发送或接收表示正在跨队列传输的对象的字节流。因此,从某种意义上讲,它们执行相同的操作,但这有点像说USB电缆与连接它们的功能相同。通常,您不想处理电线上的单个电压:仅发送或接收整个对象会更好。 (这种类比有点弱,因为Connection
实例具有send
和recv
以及send_bytes
和recv_bytes
,但是它可能仍然有用。) / p>