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