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