python--pipe

1.pipe

除了使用队列外,还可以使用管道在进程间执行消息传递

pipe([]duplex)

在进程间创建一条管道,并返回元组(conn1,conn2),其中conn1和conn2是表示管道两端的Connection对象。默认控制下管道是双向的。如果将duplex设为False,conn1只能接受,conn2只能用于发送。

2.代码

import multiprocessing

def consumer(pipe):
    output_p,input_p=pipe
    input_p.close()
    while True:
        try:        
            item=output_p.recv()
        except EOFError:
            break
        print(item)
    print('Consumer done')
    
def producer(sequence,input_p):
    for item in sequence:
        #将项放入队列
        input_p.send(item)
        

if __name__=='__main__':
    (output_p,input_p)=multiprocessing.Pipe()
    '''running consumer processing'''
    consumer_p=multiprocessing.Process(target=consumer,args=((output_p,input_p),))
    consumer_p.start()
    
    #关闭生产者中管道
    output_p.close()
    '''producing many Queues,run producer'''
    sequence=[1,2,3,4,5]
    producer(sequence,input_p)
    input_p.close()
    '''waiting processing'''
    consumer_p.join()
应该特别注意管道端点的管理问题。如果生产者与消费者都没有使用管道某个端点就应该将其关闭,这就是为什么我们把生产者的输出管道关闭,并且把消费者的输入端关闭的原因。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS 数据栈

谢谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值