python 多線程通信之Queue


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM