进程间的通信:管道

管道

在内存中开辟一个管道空间,对多个进程可见,在通信形式上形成一种约束;

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值