進程queue傳遞
frommultiprocessing importProcess,Queue
deff(qq):
qq.put([42, None, 'hello'])
if__name__ == '__main__':
q = Queue() #父進程queue
p = Process(target=f,args=(q,)) #子進程父進程的queue傳給子進程實現(xiàn)數(shù)據(jù)傳遞
p.start() #啟動子進程
print(q.get()) # prints "[42, None, 'hello']"父進程q可以get到子進程p實現(xiàn)父進程子進程數(shù)據(jù)共享
p.join()
#線程queue不能傳給進程
管道傳遞
frommultiprocessing importProcess, Pipe
deff(conn):
conn.send([42, None, 'hello from child'])
conn.send([43,None,'hello from child2'])
print("child recv:",conn.recv())
conn.close()
if__name__ == '__main__':
parent_conn, child_conn = Pipe() #生成管道實例,取出兩端
p = Process(target=f, args=(child_conn,))
p.start()
print(parent_conn.recv())# prints "[42, None, 'hello']"
print(parent_conn.recv())
parent_conn.send("hello send by parent")
p.join()
manager數(shù)據(jù)共享
frommultiprocessing importProcess, Manager
importos
deff(d, l):#每個子進程執(zhí)行的函數(shù)
d[os.getpid()]=os.getpid()
l.append(os.getpid())
print(l)
if__name__ == '__main__':
withManager() asmanager:#
d = manager.dict() #父進程生成一個字典多個進程之間可共享的字典
l = manager.list(range(5)) #父進程生成一個列表多個進程之間可以共享的列表默認有5個數(shù)據(jù)
p_list = [] #用于多個進程join
fori inrange(10):
p = Process(target=f, args=(d, l))
p.start() #開啟10個子進程
p_list.append(p)
forres inp_list: #等待每個子進程結(jié)果
res.join()
print(d)
print(l)
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。