#进程之间的通讯 # 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()