多进程间通信

1.管道

  管道,顾名思义,就是相当于一根管道,我们可以从多进程中导入这个模块,管道的实现是类似于socket连接。管道是如何实现“收发”机制的呢?

  首先,管道的一端是发数据,另一端就是收数据,对于管道而言,收发数据都是双向的,接收数据端也可以发数据,反过来亦然如此。当我们从管道的一端发送一次数据时,另一端会接收一次数据,如果再接收一次,就会陷入阻塞。那么,如何才能消除阻塞呢?当我们把管道的另一端关闭之后,便不会陷入阻塞模式,而是会报错,产生EOF错误,从而我们可以获知,没有数据可以接收了!

# Author:Zhang Zhao
from multiprocessing import Process
from multiprocessing import Pipe


def func(p):
    foo,son = p
    foo.close()
    while True:
        try:
            print(son.recv())
        except EOFError as e:
            print('EOF err',e)
            break


if __name__ == '__main__':
    foo,son = Pipe()
    p = Process(target=func,args=((foo,son),))
    p.start()
    son.close()
    foo.send('hello')
    foo.send('hello')
    foo.send('hello')
    foo.close()

猜你喜欢

转载自www.cnblogs.com/zz1314/p/10559001.html