1. 程式人生 > 程式設計 >Python程序的通訊Queue、Pipe例項分析

Python程序的通訊Queue、Pipe例項分析

本文例項講述了Python程序的通訊Queue、Pipe。分享給大家供大家參考,具體如下:


內容相關:

概念:程序的通訊

Queue:建立與使用

Pipe:建立與使用


程序通訊的概念

  • 程序的資源空間是相互獨立的,一般而言是不能相互訪問的。但很多情況下程序間需要互相通訊,來完成系統的某項功能。程序通過與核心及其它程序之間的互相通訊來協調它們的行為。
  • 通訊方法:
    • 資料傳輸:一個程序將它的資料傳送給另一個程序【如socket一般,把需要通訊的資料傳輸給對方】
    • 管道:使用一片獨立的區域【不在雙方的資源空間中】,像一個有兩個口的倉庫一樣,廠家負責在東門把產品放到倉庫,司機負責在西門拉走產品
    • 資源共享:約定一片區域,雙方都可以隨意取放
    • 訊息佇列:這也是一個獨立的區域,足夠許可權的程序可以向佇列中新增訊息,被賦予讀許可權的程序則可以讀走佇列中的訊息

Queue:

  • 可以使用佇列multiprocessing.Queue來進行程序通訊

Queue 在multiprocessing 模組中:from multiprocessing import Queue

  • Queue的使用:
    • 1.建立物件:Queue物件=Queue()
    • 2.傳入物件:要在主程序外使用Queue物件,需要作為引數傳入image
    • 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物件image
    • 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程式設計有所幫助。