python--pipe

1.pipe

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

pipe([]duplex)

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

2.code

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()

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