管道

一、管道的特点及机制
1、对列是基于管道实现的
2、管道是基于socket实现的
3、对列 + 锁 可以实现简便的IPC机制 使得 进程之间数据安全
4、管道 进程之间数据不安全,且存取数据复杂
5、socket + pickle 实现管道
二、简单的锁,代码实现
from multiprocessing import Pipe
left,right = Pipe()
left.send(1234)
print(right.recv())

结果:
1234

三、两种进程实现管道,进程间管道传输数据

from multiprocessing import Pipe,Process
def consumer(pipe):
    print(pipe[1].recv())
if __name__ == '__main__':
    pipe = Pipe()
    # print(pipe)
    Process(target=consumer,args=(pipe,)).start()
    pipe[0].send(1324)

升级:

from multiprocessing import Pipe,Process
def consumer(left,right):
    left.close()
    print(right.recv())
if __name__ =='__main__':
    left,right = Pipe()
    Process(target=consumer,args=(left,right)).start()
    left.send(1234)

多进程实现管道

from multiprocessing import Pipe,Process
def consumer(left,right):
    left.close()
    while True:
        try:
            print(right.recv())
        except EOFError:
            break
if __name__ =='__main__':
    left,right = Pipe()
    Process(target=consumer,args=(left,right)).start()
    right.close()
    for i in range(10):
        left.send('泔水%s'%i)
    left.close()
多进程实现管道的特点:
1、pipe的端口管理不会随着某一个进程的关闭就关闭
2、操作系统来管理进程对这些端口的使用
3、操作系统管理4个端口,每关闭一个端口计数减1,直到所有的端口都关闭了
4、剩余1个端口的时候 recv就会报错

转载于:https://www.cnblogs.com/youhongliang/p/9682887.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值