什麼是佇列
佇列的建立
我們知道佇列使用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...