【一】管道类介绍
'''
Pipe
from multiprocessing import Pipe
【1】创建管道对象
left_pipe, right_pipe = Pipe() # 默认参数 是 dumplex : 默认双通道的管道
【2】主要的方法
(1)接收数据
先将另一端关闭 ---> 一端取数据
left_pipe.close()
right_pipe.recv()
(2)发送数据
left_pipe.close()
right_pipe.send()
'''
【二】使用
from multiprocessing import Pipe, Process
def producer(pipe_conn, name):
# 【1】获取到两个管道对象 左侧管道对象 右侧管道对象
left_conn, right_conn = pipe_conn
# 【2】放数据
# 先关闭一侧管道
right_conn.close()
# 再通过右侧管道传数据
for i in range(5):
data = f'producer {name} 生产了 {i}'
print(data)
left_conn.send(data)
# 传递完所有数据之后一定不要忘了将打开的管道关闭
left_conn.close()
def customer(pipe_conn, name):
# 【1】获取到两个管道对象 左侧管道对象 右侧管道对象
left_conn, right_conn = pipe_conn
# 【2】取数据
# 关闭左管道
left_conn.close()
# 通过右管道取数据
while True:
data = right_conn.recv()
print(f'customer {name} 消费了 {data}')
if not data:
break
right_conn.close()
def main():
# 【一】创建管道对象
pipe = Pipe()
# 【二】创建消费者对象和生产者对象
producer_one = Process(
target=producer,
args=(pipe, f'prod_one')
)
producer_one.start()
# 【三】创建消费者
customer_one = Process(
target=customer,
args=(pipe, f'customer_one')
)
customer_one.daemon = True
customer_one.start()
producer_one.join()
管道需要创建一个管道对象
管道对象里面有左右两个管道对象
传数据的时候要关闭一侧,从另一侧传数据进去
取数据的时候也要关闭一侧,从另一端取数据
if name == 'main':
main()