訊息佇列的基本操作

2021-10-02 00:19:05 字數 2147 閱讀 6226

什麼是佇列

佇列的建立

我們知道佇列使用multiprocesing模組的queue,用**實現一下

import multiprocessing

#定義訊息佇列

#如果不指定佇列長度,則預設為最大,如果指定了訊息佇列的大小,則訊息佇列就有上限控制

#此處的queue(3)指的是放入3條訊息

queue=multiprocessing.queue(3)

#queue.put(值)向訊息佇列中放入內容

#put的值幾乎可以是任意型別

queue.put(

"hello"

)#放入第乙個值

queue.put(1)

#放入第二個值

queue.put([1

,2,3

])#放入第三個值

#queue.put("a") #放入第四個值

#queue.put_nowait("a") #放入五個值

#列印佇列物件

print

(queue)

#獲取第乙個值

value1=queue.get(

)print

(value1)

#獲取第二個值

value2=queue.get(

)print

(value2)

#獲取第三個值

value3=queue.get(

)print

(value3)

#獲取第四個值

#value4=queue.get()

#print(value4)

#value5=queue.get_nowait()

#print(value5)

結果:

佇列的長度為三剛好通過put()放入了三個資料屬於已滿狀態,但是有通過get()把三個值取出了此時隊列為空。我們加入多新增乙個值會出現什麼情況呢?

佇列已滿再新增佇列就進入了阻塞狀態,預設等待佇列先取出放入的新值,在已經滿的佇列中用queue.put_nowait(「a」)新增會發生什麼呢?

我們看到用queue.put_nowait(「a」)新增不在等待直接報錯,如果我們把取空的佇列再用get()取有會發生什麼呢?

這時執行完前面的**,它會預設等待這放入新值讓它取。同樣在空佇列中使用queue.get_nowait()不會等待放入新值,直接報錯。

訊息佇列常見的判斷

首先我們建立乙個佇列

import multiprocessing

#建立乙個長度為3的佇列

queue=multiprocessing.queue(3)

queue.put(1)

queue.put(2)

queue.put(3)

#取值queue.get(

)# 1.判斷是否已滿

a=queue.full(

)#返回true為滿 false未滿

print

("a--->"

,a)#2.取出佇列中訊息的個數

print

("訊息的個數:"

,queue.qsize())

# 3.判斷是否已經為空

b=queue.empty(

)print

("b--->"

,b)

程序間資料共享

佇列到底在程序間是如何進行共享資料,接下我們先用乙個圖表示一下

兩個執行緒乙個在資料放入端通過put()寫入資料,乙個在讀取端通過get()讀取資料。

C 操作訊息佇列

傳送物件到佇列中 佇列名稱,因為佇列名稱在乙個應用中應該不改變的,所以大家最好寫在配置檔案中 要發出去的物件 public static void sendqueue string queuepath,mybase.smsqueue sq 檢查佇列,如果佇列不存在,則建立 佇列名稱 private ...

python 操作訊息佇列

其中p指producer,即生產者 c指consumer,即消費者。中間的紅色表示訊息佇列,例項中表現為hello佇列。往佇列裡插入資料前,檢視訊息佇列 sudo rabbitmqctl list queues listing queues celeryev.db53a5e0 1e6a 4f06 a...

python 操作訊息佇列

閱讀目錄 回到頂部 其中p指producer,即生產者 c指consumer,即消費者。中間的紅色表示訊息佇列,例項中表現為hello佇列。往佇列裡插入資料前,檢視訊息佇列 sudo rabbitmqctl list queues listing queues celeryev.db53a5e0 1...