Python multiprocessing模块中的Pipe管道使用实例
multiprocessing.Pipe([duplex])
返回2个连接对象(conn1,conn2),代表管道的两端,默认是双向通信.如果duplex=False,conn1只能用来接收消息,conn2只能用来发送消息.不同于os.open之处在于os.pipe()返回2个文件描述符(r,w),表示可读的和可写的
实例如下:
#!/usr/bin/python #coding=utf-8 importos frommultiprocessingimportProcess,Pipe
defsend(pipe): pipe.send(['spam']+[42,'egg']) pipe.close()
deftalk(pipe): pipe.send(dict(name='Bob',spam=42)) reply=pipe.recv() print('talkergot:',reply)
if__name__=='__main__': (con1,con2)=Pipe() sender=Process(target=send,name='send',args=(con1,)) sender.start() print"con2got:%s"%con2.recv()#从send收到消息 con2.close()
(parentEnd,childEnd)=Pipe() child=Process(target=talk,name='talk',args=(childEnd,)) child.start() print('parentgot:',parentEnd.recv()) parentEnd.send({x*2forxin'spam'}) child.join() print('parentexit')