管道

# 管道
    # 一根管子,雙向通訊,拿到管道的兩端,一端傳輸的數據會傳輸到另外一端



# 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()
相關文章
相關標籤/搜索