python--pipe

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35918970/article/details/78959904

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()
应该特别注意管道端点的管理问题。如果生产者与消费者都没有使用管道某个端点就应该将其关闭,这就是为什么我们把生产者的输出管道关闭,并且把消费者的输入端关闭的原因。

阅读更多

没有更多推荐了,返回首页