Python程序的通訊Queue、Pipe例項分析
阿新 • • 發佈:2020-03-30
本文例項講述了Python程序的通訊Queue、Pipe。分享給大家供大家參考,具體如下:
內容相關:
概念:程序的通訊
Queue:建立與使用
Pipe:建立與使用
程序通訊的概念
- 程序的資源空間是相互獨立的,一般而言是不能相互訪問的。但很多情況下程序間需要互相通訊,來完成系統的某項功能。程序通過與核心及其它程序之間的互相通訊來協調它們的行為。
- 通訊方法:
- 資料傳輸:一個程序將它的資料傳送給另一個程序【如socket一般,把需要通訊的資料傳輸給對方】
- 管道:使用一片獨立的區域【不在雙方的資源空間中】,像一個有兩個口的倉庫一樣,廠家負責在東門把產品放到倉庫,司機負責在西門拉走產品
- 資源共享:約定一片區域,雙方都可以隨意取放
- 訊息佇列:這也是一個獨立的區域,足夠許可權的程序可以向佇列中新增訊息,被賦予讀許可權的程序則可以讀走佇列中的訊息
Queue:
- 可以使用佇列multiprocessing.Queue來進行程序通訊
Queue 在multiprocessing 模組中:from multiprocessing import Queue
- Queue的使用:
- 1.建立物件:Queue物件=Queue()
- 2.傳入物件:要在主程序外使用Queue物件,需要作為引數傳入
- 3.操作物件:【獲取元素:Queue物件.get()】、【放入元素:Queue物件.put(元素)】
#Queue在multiprocessing中 from multiprocessing import Queue,Process def f(q):#要在主程序外使用,需要作為引數傳入 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,)) p2.start()
Pipe:
- 可以使用管道Pipe來進行程序通訊
Pipe 在multiprocessing 模組中:from multiprocessing import Pipe
- Pipe的使用:
- 1.建立物件:第一個Pipe物件,第二個Pipe物件=Pipe(),返回兩個物件,第一個物件只能發,第二個物件只能收
- 2.傳入物件:在要傳送的程序,傳入第一個Pipe物件;在要接收的程序,傳入第二個Pipe物件
- 3.操作物件:【獲取元素:第一個物件.recv()】、【放入元素:第二個物件.send(元素)】
- 4.操作完成後關閉管道:第一個物件.close(),第一個物件.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()#返回兩個值,第一個只能發,第二個只能收 p1=Process(target=f,args=(child_conn,)) p2 = Process(target=m,args=(parent_conn,))# p1.start() p2.start() p1.join() p2.join()
更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python程序與執行緒操作技巧總結》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python入門與進階經典教程》、《Python+MySQL資料庫程式設計入門教程》及《Python常見資料庫操作技巧彙總》
希望本文所述對大家Python程式設計有所幫助。