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()
應該特別注意管道端點的管理問題。如果生產者與消費者都沒有使用管道某個端點就應該將其關閉,這就是為什么我們把生產者的輸出管道關閉,並且把消費者的輸入端關閉的原因。