管道
在内存中开辟一个管道空间,对多个进程可见,在通信形式上形成一种约束;
multiprocessing —>Pipe
Pipe(duplex)
功能:创建一个管道
参数:duplex 默认为True,表示管道为双向的;如果设置为False 则表示管道为单向管道
返回值:返回两个管道流对象,分别表示管道的两端,
如果参数为True,两个对象均可发送接收;
如果参数为False,第一个对象只能接收,第二个对象只能发送。
向管道发送数据使用send()函数,从管道接受数据使用recv()函数
recv()函数为阻塞函数,当管道中数据为空的时候,会阻塞。
一次recv()只能接收到一个send()的内容
send()可以发送字符串数字列表等多种类型数据
from multiprocessing import Process,Pipe
import time,os
#创建管道对象
# child_conn,parent_conn=Pipe()
child_coon,parent_conn=Pipe(False)#当参数为False时候,child只能recv,parent只能send
#创建一个子进程函数
def fun(name):
time.sleep(1)
child_conn.send("hello"+str(name))
print(os.getppid(),'----',os.getpid())
jobs=[]
#创建5个子进程
for i in range(5):
p=Process(target=fun,args=(i,))
jobs.append(p)
p.start()
#创建5个父进程接收
# for i in range(5):
time.sleep(5)
data=parent_conn.recv()#遇到阻塞
print(data)
for i in jobs:
i.join()