pyhton中的Queue(佇列)

2022-04-10 19:47:43 字數 2132 閱讀 6994

什麼是佇列?

佇列就像是水管子,先進先出,與之相對應的是棧,後進先出。

佇列是執行緒安全的,佇列自身有機制可以實現:在同一時刻只有乙個執行緒在對佇列進行操作。

存資料,取資料

1

import

queue

23 q = queue.queue() #

呼叫佇列生成物件

4 q.put(1) #

存放第乙個值到佇列

5 q.put(2) #

存放第二個值到佇列67

8print

'get frist one:

',q.get() #

獲取佇列的第乙個值

9print

'get second on:

',q.get() #

獲取佇列的第二個值

如果佇列中的資料被取完了怎麼辦呢?

會阻塞

q = queue.queue() #

呼叫佇列生成物件

q.put(1) #

存放第乙個值到佇列

q.put(2) #

存放第二個值到佇列

a = q.get() #

獲取佇列的第乙個值

print

'get frist one:%s

' %a

b = q.get() #

獲取佇列的第二個值

print

'get second one:%s

' %b

c = q.get()#

獲取佇列的第三個值

print

'get third one:%s

' %c

#結果:

'''get frist one:1

get second one:2

#這裡是阻塞狀態,一直在等待著值進來~

'''

取不到值的時候如何能讓它不阻塞?

get_nowait()方法取 

複製**

q = queue.queue() #

呼叫佇列生成物件

q.put(1) #

存放第乙個值到佇列

q.put(2) #

存放第二個值到佇列

a = q.get() #

獲取佇列的第乙個值

print

'get frist one:%s

' %a

b = q.get() #

獲取佇列的第二個值

print

'get second one:%s

' %b

c = q.get_nowait()#

獲取佇列的第三個值 ,使用:get_nowait()

print

'get third one:%s

' % c

不阻塞的時候,取不到又會報錯,怎麼辦?

異常處理

q = queue.queue() #

呼叫佇列生成物件

try:

q.get_nowait()

except

queue.empty as f:

print

'the queue is empty!'

佇列的長度是可以規定的哦

那麼問題來了,佇列被存滿了怎麼辦?----->會阻塞...

如何能不阻塞?---->put_nowait()----->無法存放會報錯------>報錯怎麼辦?------>異常處理。

q = queue.queue(2) #

呼叫佇列生成物件

q.put(1) #

存放第乙個值到佇列

print

'put value 1 done

'q.put(2) #

存放第二個值到佇列

print

'put vlaue 2 done

'q.put(3) #

存放第三個值到佇列

print

'put value 3 done'#

結果:'''

put value 1 done

put vlaue 2 done

#這裡會阻塞,會一直等待~

'''

queue的長度 佇列 Queue

佇列 queue 是先進先出 fifo,first in first out 的線性表。在具體應用中通常用鍊錶或者陣列來實現。佇列只允許在後端 稱為rear 進行插入操作,在前端 稱為front 進行刪除操作。隊結構 迴圈佇列可以更簡單防止偽溢位 假溢位 的發生,但佇列大小是固定的。防止假溢位,如d...

C 中queue(佇列)的用法

include include include include include 或 include queue include queue 定義乙個queue的變數queuem 檢視是否為空範例m.empty 是的話返回1,不是返回0 從已有元素後面增加元素m.push 輸出現有元素的個數m.siz...

C 中queue(佇列)的用法

include include include 呼叫的時候要有標頭檔案 include或 include include include 詳細用法 定義乙個queue的變數 queuem 檢視是否為空範例 m.empty 是的話返回1,不是返回0 從已有元素後面增加元素 m.push 輸出現有元素的...