# 管道 # 一根管子,双向通信,拿到管道的两端,一端传输的数据会传输到另一端 # 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()