Queue 的方式:
# -*- coding: utf-8 -*- from multiprocessing import Queue,Process ''' 將queue 通過參數的形式進行傳遞,這個queue 實際是復制一份到子進程中,當子進程的queue改變后 會有一個中間方將queue進行序列化 , 在反序列化到父進程的queue中 如果要使用線程的queue ,就會報一個pickle _thread lock 的異常,就是因為線程的queue 不能被序列化導致的 ''' def f(q1): q1.put('aaa') if __name__=='__main__': q = Queue() p = Process(target = f,args=(q,)) p.start() print(q.get()) p.join()
管道方式 :
# -*- coding: utf-8 -*- from multiprocessing import Process,Pipe def run(conn): conn.send('aaa') conn.close() if __name__=='__main__': parent_conn,child_conn = Pipe() p = Process(target=run,args=(child_conn,)) p.start() print(parent_conn.recv()) p.join()
manager 方式:
# -*- coding: utf-8 -*- ''' 用 manager.dict() 和manager.list()生成的 列表和字典可以實現共享 一般進程間的共享使用這種方式 ''' from multiprocessing import Process,Manager def f(d,l): d[1]='1' d['2']=2 d[0.25]=None l.append(1) print(l) if __name__=='__main__': with Manager() as manager: #生成一個字典 , 可在多個進程間傳遞 d = manager.dict() l = manager.list(range(5)) p_list=[] for i in range(10): p = Process(target=f,args=(d,l)) p.start() p_list.append(p) for res in p_list: res.join() print(d) print(l)