Python進(jìn)程的通信Queue、Pipe實(shí)例分析
本文實(shí)例講述了Python進(jìn)程的通信Queue、Pipe。分享給大家供大家參考,具體如下:
內(nèi)容相關(guān):
概念:進(jìn)程的通信
Queue:創(chuàng)建與使用
Pipe:創(chuàng)建與使用
進(jìn)程通信的概念
- 進(jìn)程的資源空間是相互獨(dú)立的,一般而言是不能相互訪問的。但很多情況下進(jìn)程間需要互相通信,來完成系統(tǒng)的某項(xiàng)功能。進(jìn)程通過與內(nèi)核及其它進(jìn)程之間的互相通信來協(xié)調(diào)它們的行為。
- 通信方法:
- 數(shù)據(jù)傳輸:一個(gè)進(jìn)程將它的數(shù)據(jù)發(fā)送給另一個(gè)進(jìn)程【如socket一般,把需要通信的數(shù)據(jù)傳輸給對(duì)方】
- 管道:使用一片獨(dú)立的區(qū)域【不在雙方的資源空間中】,像一個(gè)有兩個(gè)口的倉庫一樣,廠家負(fù)責(zé)在東門把產(chǎn)品放到倉庫,司機(jī)負(fù)責(zé)在西門拉走產(chǎn)品
- 資源共享:約定一片區(qū)域,雙方都可以隨意取放
- 消息隊(duì)列:這也是一個(gè)獨(dú)立的區(qū)域,足夠權(quán)限的進(jìn)程可以向隊(duì)列中添加消息,被賦予讀權(quán)限的進(jìn)程則可以讀走隊(duì)列中的消息
Queue:
- 可以使用隊(duì)列multiprocessing.Queue來進(jìn)行進(jìn)程通信
Queue 在multiprocessing 模塊中:from multiprocessing import Queue
- Queue的使用:
#Queue在multiprocessing中
from multiprocessing import Queue,Process
def f(q):#要在主進(jìn)程外使用,需要作為參數(shù)傳入
q.put(['helloworld'])
def m(q):
print("get in p2:",q.get())
if __name__=="__main__":
q=Queue()
p=Process(target=f,args=(q,))
p.start()
p2=Process(target=m,args=(q,))
p2.start()
Pipe:
- 可以使用管道Pipe來進(jìn)行進(jìn)程通信
Pipe 在multiprocessing 模塊中:from multiprocessing import Pipe
- Pipe的使用:
- 1.創(chuàng)建對(duì)象:第一個(gè)Pipe對(duì)象,第二個(gè)Pipe對(duì)象=Pipe(),返回兩個(gè)對(duì)象,第一個(gè)對(duì)象只能發(fā),第二個(gè)對(duì)象只能收
- 2.傳入對(duì)象:在要發(fā)送的進(jìn)程,傳入第一個(gè)Pipe對(duì)象;在要接收的進(jìn)程,傳入第二個(gè)Pipe對(duì)象

- 3.操作對(duì)象:【獲取元素:第一個(gè)對(duì)象.recv()】、【放入元素:第二個(gè)對(duì)象.send(元素)】
- 4.操作完成后關(guān)閉管道:第一個(gè)對(duì)象.close(),第一個(gè)對(duì)象.close()
from multiprocessing import Pipe,Process def f(conn): a=[1,2,3,4] conn.send(a) conn.close() def m(conn): a=conn.recv() conn.close() if __name__=="__main__": parent_conn,child_conn=Pipe()#返回兩個(gè)值,第一個(gè)只能發(fā),第二個(gè)只能收 p1=Process(target=f,args=(child_conn,)) p2 = Process(target=m, args=(parent_conn,))# p1.start() p2.start() p1.join() p2.join()
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python進(jìn)程與線程操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》、《Python+MySQL數(shù)據(jù)庫程序設(shè)計(jì)入門教程》及《Python常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python爬蟲eval實(shí)現(xiàn)看漫畫漫畫柜mhgui實(shí)戰(zhàn)分析
這篇文章主要為大家介紹了Python爬蟲eval實(shí)現(xiàn)看漫畫漫畫柜mhgui實(shí)戰(zhàn)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
python接口自動(dòng)化之使用token傳入到header消息頭中
這篇文章主要介紹了python接口自動(dòng)化之使用token傳入到header消息頭中問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Python中實(shí)現(xiàn)字符串類型與字典類型相互轉(zhuǎn)換的方法
這篇文章主要介紹了Python中實(shí)現(xiàn)字符串類型與字典類型相互轉(zhuǎn)換的方法,非常實(shí)用,需要的朋友可以參考下2014-08-08
Python3實(shí)現(xiàn)發(fā)送QQ郵件功能(文本)
這篇文章主要為大家詳細(xì)介紹了Python3實(shí)現(xiàn)發(fā)送QQ郵件功能,文本方面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Python使用requests庫發(fā)送請求的示例代碼
與原生的urllib庫相比,requests庫提供了更簡潔、易于理解和使用的API,使發(fā)送HTTP請求變得更加直觀和高效,所以本文給大家介紹了Python如何使用requests庫發(fā)送請求,需要的朋友可以參考下2024-03-03
pycharm中如何自定義設(shè)置通過“ctrl+滾輪”進(jìn)行放大和縮小實(shí)現(xiàn)方法
這篇文章主要介紹了pycharm中如何自定義設(shè)置通過“ctrl+滾輪”進(jìn)行放大和縮小實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09

