# 管道 # 一根管子,雙向通訊,拿到管道的兩端,一端傳輸的數據會傳輸到另外一端 # from multiprocessing import Pipe,Process # # # # # # def func(conn): # # while True: # # print(conn.recv()) # 當管道沒有數據時,接收這裏會阻塞住 # # # # # # if __name__ == '__main__': # # conn1, conn2 = Pipe() # 建立一個管道,拿到管道的兩端鏈接符 # # p = Process(target=func, args=(conn1, )) # # p.start() # # for i in range(10): # # conn2.send('我是管道的一端') # 下面的方法時,當管道沒有數據時,會觸發管道的報錯,接收報錯的異常知道管道沒有數據了 from multiprocessing import Pipe, Process def func(conn1, conn2): ''' 只接收數據 :param conn1: :param conn2: :return: ''' conn2.close() # 將管道的一端關閉掉 while True: try: msg = conn1.recv() # print(msg) except EOFError: # 當全部進程中關於這個管道的全部的鏈接被關閉掉,纔會拋出這個異常錯誤 print('管道1端即將關閉') conn1.close() break if __name__ == '__main__': conn1, conn2 = Pipe() # 建立一個管道,拿到管道的兩端鏈接符 p = Process(target=func, args=(conn1, conn2)) p.start() conn1.close() # 當主進程中的conn1被關閉掉了,並不會影響子進程中的conn1的接收,主進程的conn1是主進程1端的口,子進程中的conn1是子進程1端的口 for i in range(10): conn2.send('我是管道的一端') conn2.close()