1. 程式人生 > >python程序之間的通訊方式---------訊息佇列

python程序之間的通訊方式---------訊息佇列

  圖中有程序A和程序B,然後為了在兩個程序中通訊,就在記憶體中開闢了一個空間叫佇列C,多個程序都可以對這個佇列C可見, 接下來
  就是A程序往C佇列裡放訊息,一次放一個,一次放一個訊息,程序B作為接收端,一次從佇列裡拿出一個訊息,一次
  拿出一個訊息,這樣看起來和管道基本差不多,但實際上是python當中,他的函式為我們做了一個同化,佇列裡的
  函式更加豐富,並且內部資料的組織結構不一樣
3.建立佇列
  1.#在記憶體中開闢一個佇列模型,用來存放訊息,任何擁有佇列物件的程序都可以進行訊息存放和取出
    multiprocessing-------> Queue
  2.介面函式
    1.q = Queue(maxsize=0) #建立訊息佇列物件
      引數:
         maxsize 預設為0,表示訊息佇列可以存放的訊息由系統自動分配的空間而定,能存放多少個訊息,由系統自動分配
         >0正整數 表示訊息佇列中最多可以存放多少條訊息(訊息個數,不看位元組大小)
      返回值:
        訊息佇列物件
    2.q.put(‘xxx’)向訊息佇列存放一條訊息,當訊息佇列滿的時候會阻塞,存放的訊息型別可以是數字,列表,字串等等
    3.q.full()判斷佇列是否滿了,滿了為True,否則為False
    4.q.qsize()檢視訊息佇列中訊息的數量
    5.q.get()獲取訊息,每次獲取一條,當訊息佇列為空的時候,就發生阻塞
    6.q.empty()判斷訊息佇列是否為空,為空是True,不為空返回False
    7.put,get中block引數和timeout引數
      block預設為True,表示兩個函式都是阻塞函式
      block引數為False時,表示不阻塞
      timeout 當block設定為True的時候表示超時等待時間,你可以給timeout設定時間
  3.事例
    1.判斷佇列是否滿了
    from multiprocessing import Queue
    #建立訊息佇列,最多有三條
    q = Queue(3)
    #存放訊息
    i = 0
    while True:
        #q.full判斷佇列是不是滿了
        if q.full():
            print('訊息佇列已經滿了')
            break
        q.put('博主真帥'+ str(i))
        i += 1
        print('當前佇列一共有%d條訊息'%q.qsize())
       列印結果為:
         訊息佇列已經滿了
         當前佇列一共有3條訊息
    2.獲取訊息
        from multiprocessing import Queue
        #建立訊息佇列,最多有三條
        q = Queue(3)
        #存放訊息
        i = 0
        while True:
            #q.full判斷佇列是不是滿了
            if q.full():
                print('訊息佇列已經滿了')
                break
            q.put('博主真帥'+ str(i))
            i += 1
            print('當前佇列一共有%d條訊息'%q.qsize())
            #獲取訊息
            for i in range(q.qsize()):
                print('獲取訊息%s'%q.get())
            #列印結果:
              訊息佇列已經滿了
              當前佇列一共有3條訊息
              獲取訊息博主真帥0
              獲取訊息博主真帥1
              獲取訊息博主真帥2
    3.訊息佇列程序間的通訊:
        from multiprocessing import Queue,Process
        from time import sleep

相關推薦

(三)程序通訊方式-----訊息佇列

訊息佇列 訊息佇列,是訊息的連結表,存放在核心中。一個訊息佇列由一個識別符號(即佇列ID)來標識。使用者程序可以向訊息佇列新增訊息,也可以向訊息佇列讀取訊息。 同管道檔案相比,訊息佇列中的每個訊息指定特定的訊息型別,接收的時候可以不需要按照佇列次序讀取,可以根據自定義型別

我最喜歡的程序之間通訊方式-訊息匯流排

道哥的第 020 篇原創 [TOC] ## 一、Linux 系統中的程序之間通訊(IPC) 作為一名嵌入式軟體開發人員來說,處理程序之間的通訊是很常見的事情。從通訊目的的角度來看,我們可以把程序之間的通訊分成 3 種: > 1. 為了程序的排程: 可以通過訊號來實現; > 2. 為

python程序之間通訊方式---------訊息佇列

  圖中有程序A和程序B,然後為了在兩個程序中通訊,就在記憶體中開闢了一個空間叫佇列C,多個程序都可以對這個佇列C可見, 接下來  就是A程序往C佇列裡放訊息,一次放一個,一次放一個訊息,程序B作為接收端,一次從佇列裡拿出一個訊息,一次  拿出一個訊息,這樣看起來和管道基本差不多,但實際上是python當中,

程序通訊訊息佇列和共享記憶體方式的實現

共享記憶體方式使用QSharedMemory 和QSystemSemaphore兩個類實現 一個程序往共享記憶體空間中寫,一個程序往共享記憶體空間中讀 兩程序通訊時: 向共享記憶體中提供資料的一方: 1,定義QSharedMemory shareMemory,並設定標誌名shareMemory.setKey(

Linux中程序通訊機制----訊息佇列

一、什麼是訊息 訊息(message)是一個格式化的可變長的資訊單元。訊息機制允許由一個程序給其它任意的程序傳送一個訊息。當一個程序收到多個訊息時,可將它們排成一個訊息佇列。 1、訊息機制的資料結構 (1)訊息首部 記錄一些與訊息有關的資訊,如訊息的型別、大小、

Linux系統程式設計——程序通訊訊息佇列

概述 訊息佇列提供了一種在兩個不相關的程序之間傳遞資料的簡單高效的方法,其特點如下: 1)訊息佇列可以實現訊息的隨機查詢。訊息不一定要以先進先出的次序讀取,程式設計時可以按訊息的型別讀取。 2)訊息佇列允許一個或多個程序向它寫入或者讀取訊息。 3)與無名管道、命名管道一

【Linux】Linux程序通訊訊息佇列

1、訊息佇列概念引入    訊息佇列提供了一個從一個程序向另外一個程序傳送一塊資料的方法每個資料塊都被認為是有一個型別,接收者程序接收的資料塊可以有不同的型別值訊息佇列也有管道一樣的不足,就是每個訊息的最大長度是有上限的(MSG

Linux 多工程式設計——程序通訊訊息佇列(Message Queues)

概述 訊息佇列提供了一種在兩個不相關的程序之間傳遞資料的簡單高效的方法,其特點如下: 1)訊息佇列可以實現訊息的隨機查詢。訊息不一定要以先進先出的次序讀取,程式設計時可以按訊息的型別讀取。 2)訊息佇列允許一個或多個程序向它寫入或者讀取訊息。 3)與無名管道、命名管道一

【Linux】程序通訊訊息佇列、訊號量和共享儲存

訊息佇列、訊號量和共享儲存是IPC(程序間通訊)的三種形式,它們功能不同,但有相似之處,下面先介紹它們的相似點,然後再逐一說明。 1、相似點 每個核心中的IPC結構(訊息佇列、訊號量和共享儲存)都用一個非負整數的識別符號加以引用,與檔案描述符不同,當一個

程序通訊訊息佇列

 最近發現訊息佇列的一些隱蔽的點,通過程式碼註釋記錄分享下。樣例來自https://www.cnblogs.com/52php/p/5862114.html,感謝。 接收端程式碼如下:#include <stdio.h>#include <stdlib.h&

程序通訊----使用訊息佇列

面來說說如何用不用訊息佇列來進行程序間的通訊,訊息佇列與命名管道有很多相似之處。有關命名管道的更多內容可以參閱我的另一篇文章:Linux程序間通訊——使用命名管道 一、什麼是訊息佇列 訊息佇列提供了一種從一個程序向另一個程序傳送一個數據塊的方法。  每個資料塊都被認為含有

Linux程序通訊——使用訊息佇列

下面來說說如何用不用訊息佇列來進行程序間的通訊,訊息佇列與命名管道有很多相似之處。有關命名管道的更多內容可以參閱我的另一篇文章:Linux程序間通訊——使用命名管道 一、什麼是訊息佇列 訊息佇列提供了一種從一個程序向另一個程序傳送一個數據塊的方法。  每個資料塊都被認為含

linux 程序通訊訊息佇列以及例項

程式碼來自:嵌入式linux應用開發標準教程 訊息可以理解為寫信給某個人,這裡在應用中是告訴系統寫信人和寫信的內容就可以了, 別人會來看發信人是誰,如果不是自己想要的就放棄讀信或者只要有訊息自己就讀取訊息 訊息佇列就是按佇列的方式處理很多訊息,先發的最先被讀 訊息佇列:

Linux系統下-程序通訊訊息佇列-詳解)

Linux下程序間通訊方式: # 管道( pipe ):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。 # 有名管道 (named pipe) : 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序

Linux的程序程式設計-之二-程序通訊訊息佇列

1.1         系統V訊息佇列 訊息佇列中的每個訊息都有如下的資料結構: struct msgbuf { long mtype;         // 訊息型別 char mtext[n];      // 訊息內容,n由使用者自己定義 }; 1.1.1      

swoole程序通訊訊息佇列

1. 相關函式 2. 與訊息佇列相關的核心引數 1. 引數 kernel.msgmnb = 4203520,訊息佇列的最大位元組數 kernel.msgmni = 64,最多允許建立多少個訊息佇列 kernel.msgmax = 8192,訊

【Linux】程序通訊訊息佇列

在上一篇部落格裡,我們學習了程序間通訊的一種方式,那就是管道,今天我們繼續學習另一種方式訊息佇列。 訊息佇列 一. 什麼是訊息佇列?   訊息佇列是訊息的連結串列,存放在核心中並由訊息佇列識別符號表示。   訊息佇列提供了一個從一個程序向另一個程

IPC程序通訊訊息佇列

基本概念訊息佇列提供了一個從一個程序向另外一個程序傳送一塊資料的方法。每個資料塊都被認為是有一個型別,接收者程序接收的資料塊可以有不同的型別值。訊息佇列與管道同樣有缺陷,就是每個訊息的最大長度是有上限的(MSGMAX),每個訊息佇列的總的位元組數是有上限的(MSGMNB),系

嵌入式Linux併發程式設計,程序通訊方式,System V IPC,訊息佇列,開啟/建立msgget(), 傳送訊息msgsnd(),格式,接收訊息msgrcv(),控制訊息佇列 msgctl()

文章目錄 1,訊息佇列 2,訊息佇列結構 3,訊息佇列使用步驟 3.1,開啟/建立訊息佇列 msgget() 3.1.1,開啟/建立訊息佇列---示例msgget() 3.2,向訊息佇列傳送訊息 msgs

程序通訊方式總結——訊息佇列

        Linux/Unix系統IPC是各種程序間通訊方式的統稱,但是其中極少能在所有Linux/Unix系統實現中進行移植。隨著POSIX和Open Group(X/Open)標準化的推進