#进程之间的通信 # 1.Queue #跟线程里的queue类似但是不同 from multiprocessing import Process,Queue import os def f(q, n): q.put([11, n, None]) print('subpro',id(q)) if __name__=='__main__': q=Queue() print('mainpro',id(q)) lst=[] for i in range(3): p=Process(target=f,args=(q,i)) #必须把q传进去,因为不同进程间内存是不共享的 lst.append(p) p.start() print(q.get()) print(q.get()) print(q.get()) for i in lst: i.join() # 主进程和其他子进程q(队列)的内存地址是不同的,说明并不是相同的q,python内部进行了一些操作, # 可能是进程之间在传递队列时,进行了pickle操作。
# 2.Pipes from multiprocessing import Process,Pipe def f(conn): conn.send([1,'aaa']) conn.close() if __name__=='__main__': # 返回父进程连接和子进程连接 parent_conn,child_conn=Pipe() p=Process(target=f,args=(child_conn,)) #参数必须加()别忘了,还有,也不能忘 p.start() print(parent_conn.recv()) #跟socket不同的是recv()不能加数据大小参数, # 传输数据不一定是bytes p.join()