python中Queue和pipe的差別
1、區(qū)別
(1)Queue使用putget維護(hù)隊(duì)列,pipe使用sendrecv維護(hù)隊(duì)列。
(2)pipe只提供兩個(gè)端點(diǎn),而Queue沒(méi)有限制。
這意味著在使用Pipe時(shí),只能同時(shí)啟動(dòng)兩個(gè)進(jìn)程。一個(gè)生產(chǎn)者和一個(gè)消費(fèi)者在這兩個(gè)端點(diǎn)上操作(由pipe()返回的兩個(gè)值),這兩個(gè)端點(diǎn)一起維護(hù)一個(gè)隊(duì)列。如果多個(gè)進(jìn)程同時(shí)在管道的同一個(gè)端點(diǎn)上操作,就會(huì)出現(xiàn)錯(cuò)誤(因?yàn)闆](méi)有鎖,類似于線程不安全)。因此,兩個(gè)端點(diǎn)相當(dāng)于只為流程提供兩個(gè)安全操作位置,從而將流程數(shù)量限制為只有2個(gè)。
(3)Queue的封裝比較好,Queue只提供一個(gè)結(jié)果,可以被多個(gè)進(jìn)程同時(shí)調(diào)用;Pipe()返回兩個(gè)結(jié)果,分別由兩個(gè)進(jìn)程調(diào)用。
(4)Queue的實(shí)現(xiàn)基于pipe,所以pipe的運(yùn)行速度比Queue快很多
(5)當(dāng)只需要兩個(gè)進(jìn)程時(shí),管道更快,當(dāng)需要多個(gè)進(jìn)程同時(shí)操作隊(duì)列時(shí),使用隊(duì)列。
2、實(shí)例
importrandom
importtime
frommultiprocessingimportProcess,Pipe,current_process
defproduce(conn):
whileTrue:
new=random.randint(0,100)
print('{}produce{}'.format(current_process().name,new))
conn.send(new)
time.sleep(random.random())
defconsume(conn):
whileTrue:
print('{}consume{}'.format(current_process().name,conn.recv()))time.sleep(random.random())
if__name__=='__main__':
pipe=Pipe()
p1=Process(target=produce,args=(pipe[0],))
p2=Process(target=consume,args=(pipe[1],))
p1.start()
p2.start()
以上就是python中Queue和pipe的差別,希望能對(duì)大家有所幫助。更多Python學(xué)習(xí)教程請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。