溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

多進(jìn)程_父進(jìn)程子進(jìn)程數(shù)據(jù)傳遞共享

發(fā)布時(shí)間:2020-04-06 09:32:32 來(lái)源:網(wǎng)絡(luò) 閱讀:661 作者:leiwenbin627 欄目:編程語(yǔ)言

進(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)
向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI