[b0037] python 归纳 (二二)_多进程数据共享和同步_管道Pipe
# -*- coding: utf-8 -*- """ 多进程数据共享 管道Pipe 逻辑: 2个进程,各自发送数据到管道,对方从管道中取到数据 总结: 1、只适合两个进程 2、recv 会阻塞 3、其中一个进程结束了,管道还在,另外一个进程还能使用 4、可以把管道认为一个队列, 发送数据端,往队列写数据 接收数据端,从队列读数据,队列空了阻塞 单向管道 1个队列,双向管道 2个队列 使用: 1. 创建2个管道的两端的对象 pipe_left_conn,pipe_right_conn = Pipe() 2. 在两个进程中 分布 调用 收发命令 conn.send(messsage) con.recv() 参考: Pipe对象返回的元组分别代表管道的两端,管道默认是全双工,两端都支持send和recv方法, 两个进程分别操作管道两端时不会有冲突,两个进程对管道一端同时读写时可能会有冲突: """ from multiprocessing import Process,Pipe # 子进程函数 def f(conn): conn.send("child send1") conn.send([2,'test',None]) print(conn.recv()) conn.close() if __name__ == "__main__": # 产生两个返回对象,一个是管道这一头,一个是另一头 # 创建管道,拿到两端对象 # 默认True,双向管道都能收发 # Pipe(False)单向管道 左边只接收,右边只发送 pipe_left_conn,pipe_right_conn = Pipe() p = Process(target=f,args=(pipe_right_conn,)) p.start() print(pipe_left_conn.recv()) pipe_left_conn.send('\nfather send') p.join() # 注意,子进程已经结束了,但是管理里的数据还在 print(pipe_left_conn.recv()) # print(parent_conn.recv()) # 此时管道空了,会阻塞 pipe_left_conn.close() pipe_right_conn.close() """ Out: child send1 father send [2, 'test', None] """
写满200篇博文再说