管道:
基于socket 和pickle实现的
管道是队列的底层
数据不安全
源码对管道的解释:
The Pipe() function returns a pair of connection objects connected by a pipe which by default is duplex (two-way)
该函数返回一对连接用管道的默认两端的特征
Each connection object has ***send()*** and ***recv()*** methods
管道可以分为双工管道和单向管道。管道也是用队列的原理实现的。双工就是两边都可以存取信息。
管道也可以实现进程间的通信。但是进程间数据不安全。且存取数据复杂,
队列是基于管道实现的。管道是基于socket实现的。队列是管道的一种升级,基于管道中很多弊端形成了队列。
队列在进程中数据是安全的。因为两个队列不会同时取队列中的一个数据。也不会往同一个地方放数据。队列会严格的维持持续,不会有不安全的情况发送。
管道在进程之间数据不安全的。虽然管道也能实现IPC通信, 队列是管道加锁实现的,就是因为每次取数据和放数据时都添加了锁。所以永远不可能有两个进程同时修改一个队列了,
例1:
管道对象返回值
from multiprocessing import Pipe,Process
pipe = Pipe()
print(pipe)
运行结果
(<multiprocessing.connection.PipeConnection object at 0x0000019B2245A4E0>, <multiprocessing.connection.PipeConnection object at 0x0000019B2245A2E8>) # 结果是管道的两端地址。可以元祖第一个收,第二个发
在一个进程中收发
from multiprocessing import Pipe
left, right =