python 多線程之Queue
阿新 • • 發佈:2018-07-18
star queue put 也不能 col nbsp 不能 sock span
#進程之間的通信 # 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()
python 多線程之Queue