管道

# 管道
    # 一根管子,双向通信,拿到管道的两端,一端传输的数据会传输到另一端



# 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()

 

posted @ 2018-10-21 15:23  _小溢  阅读(194)  评论(0)    收藏  举报