您好,登錄后才能下訂單哦!
進(jìn)程queue傳遞
from multiprocessing import Process,Queue
def f(qq):
qq.put([42, None, 'hello'])
if __name__ == '__main__':
q = Queue() #父進(jìn)程queue
p = Process(target=f,args=(q,)) #子進(jìn)程 父進(jìn)程的queue傳給子進(jìn)程 實(shí)現(xiàn)數(shù)據(jù)傳遞
p.start() #啟動(dòng)子進(jìn)程
print(q.get()) # prints "[42, None, 'hello']" 父進(jìn)程q可以get到子進(jìn)程p 實(shí)現(xiàn)父進(jìn)程子進(jìn)程數(shù)據(jù)共享
p.join()
#線程queue不能傳給進(jìn)程
管道傳遞
from multiprocessing import Process, Pipe
def f(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() #生成管道實(shí)例,取出兩端
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ù)共享
from multiprocessing import Process, Manager
import os
def f(d, l):#每個(gè)子進(jìn)程執(zhí)行的函數(shù)
d[os.getpid()]=os.getpid()
l.append(os.getpid())
print(l)
if __name__ == '__main__':
with Manager() as manager:#
d = manager.dict() #父進(jìn)程生成一個(gè)字典 多個(gè)進(jìn)程之間可共享的字典
l = manager.list(range(5)) #父進(jìn)程生成一個(gè)列表 多個(gè)進(jìn)程之間可以共享的列表 默認(rèn)有5個(gè)數(shù)據(jù)
p_list = [] #用于多個(gè)進(jìn)程join
for i in range(10):
p = Process(target=f, args=(d, l))
p.start() #開(kāi)啟10個(gè)子進(jìn)程
p_list.append(p)
for res in p_list: # 等待每個(gè)子進(jìn)程結(jié)果
res.join()
print(d)
print(l)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。