管道

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



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

 

转载于:https://www.cnblogs.com/whylinux/p/9825161.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值