多进程pipe

pipe模块可以实现进程之间数据传递

栗子1:3个进程,一个主进程,2个子进程,三个管道,三个进程通过3个管道连接,主进程发一个信息,通过2个子进程转发,最后回到主进程输出

import multiprocessing

def func(pipe_end,pipe_head):
    msg = pipe_end.recv()
    print("--->",msg)
    pipe_head.send(msg)



if __name__ == '__main__':
    pipe_head_1,pipe_end_1 = multiprocessing.Pipe()#声明管道对1
    pipe_head_2,pipe_end_2 = multiprocessing.Pipe()#声明管道对2
    pipe_head_3,pipe_end_3 = multiprocessing.Pipe()#声明管道对3

    p1 = multiprocessing.Process(target=func,args=(pipe_end_1,pipe_head_2))#子进程p1 执行函数func,参数为管道两端
    p1.start()
    p2 = multiprocessing.Process(target=func,args=(pipe_end_2,pipe_head_3))#子进程p2 执行函数func,参数为管道两端
    p2.start()
    pipe_head_1.send("hello")
    print(pipe_end_3.recv())

栗子2:3个进程,一个主进程,一个子进程,一个孙子进程,三个进程通过3个管道连接,主进程发一个信息,通过2个子进程转发,最后回到主进程输出

import multiprocessing

def func(pipe_end,pipe_head,*args):
    #print("--->",args[0])
    #print('--->',args[1])
    msg = pipe_end.recv()
    print("-->",msg)
    pipe_head.send(msg)
    p2 = multiprocessing.Process(target=func2,args=(args[0],args[1]))#子进程p2 执行函数func2,参数为管道两端
    p2.start()

def func2(pipe_end,pipe_head):
    msg = pipe_end.recv()
    print("--->",msg)
    pipe_head.send(msg)



if __name__ == '__main__':
    pipe_head_1,pipe_end_1 = multiprocessing.Pipe()#声明管道对1
    pipe_head_2,pipe_end_2 = multiprocessing.Pipe()#声明管道对2
    pipe_head_3,pipe_end_3 = multiprocessing.Pipe()#声明管道对3
    #print(pipe_end_2)
    #print(pipe_head_3)

    p1 = multiprocessing.Process(target=func,args=(pipe_end_1,pipe_head_2,pipe_end_2,pipe_head_3))#子进程p1 执行函数func,参数为管道两端
    p1.start()

    pipe_head_1.send("hello")
    print("->",pipe_end_3.recv())

猜你喜欢

转载自www.cnblogs.com/goldtree358/p/12133700.html
今日推荐