#進程之間的通訊 # 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()