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()
相關文章
相關標籤/搜索