Python基礎 佇列

2021-08-16 17:21:09 字數 2369 閱讀 1890

佇列queue包含三個類 

1:queue(maxsize=0)  普通模式先進先出

2:lifoqueue(maxsize=0)  後進先出

3:priorityqueue(maxsize=0)  優先順序模式

queue.qsize() 返回當前佇列裡存在的個數

queue.empty() 返回佇列是否為空

queue.full() 返回佇列是否存滿

queue.put(item, block=true, timeout=none)

將item放入佇列中。

如果可選的引數block為true且timeout為空物件(預設的情況,阻塞呼叫,無超時)。

如果timeout是個正整數,阻塞呼叫程序最多timeout秒,如果一直無空空間可用,丟擲full異常(帶超時的阻塞呼叫)。

如果block為false,如果有空閒空間可用將資料放入佇列,否則立即丟擲full異常

queue.put_nowait()無阻塞版本,等同於block=false,timeout=none

queue.get(block=true, timeout=none) 取出資料,其他與put類似

queue()示例

import queue

q = queue.queue() #普通的(先進先出

q.put(1)

q.put(2)

q.put(3)

print(q.qsize()) #獲取當前存在的個數

print(q.get()) #取出 當超過的時候會報錯

print(q.get())

print(q.get())

結果:

1 2 3 

lifoqueue()示例

import queue

q = queue.lifoqueue() #普通的(先進先出

q.put(1)

q.put(2)

q.put(3)

print(q.qsize()) #獲取當前存在的個數

print(q.get()) #取出 當超過的時候會報錯

print(q.get())

print(q.get())

結果:

3  2 1 

priorityqueue()示例  

按照一定的規律確定優先順序,例如數字越小優先順序越高,或者按字元排序,值得注意的是只能採用一種模式來確定,全為數字或是全為字元,兩者不能混在一起,不然會報錯。

import queue

q = queue.priorityqueue() #普通的(先進先出

q.put((2,'b'))

q.put((1,'a'))

q.put((3,'c'))

print(q.qsize()) #獲取當前存在的個數

print(q.get()) #取出 當超過的時候會報錯

print(q.get())

print(q.get())

結果:

(1, 'a')

(2, 'b')

(3, 'c')

簡單的生產者和消費者模型

import queue,threading,time

q = queue.queue()

def producer():

count = 0

while true:

q.put('switch %s' %count)

print('switch %s' %count)

count += 1

time.sleep(1)

def consumer():

while true:

if q.qsize() > 0 :

print('buy %s'%q.get())

time.sleep(2)

p = threading.thread(target=producer)

c = threading.thread(target=consumer)

p.start()

c.start()

結果:

生成了switch 0

購買了 switch 0

生成了switch 1

購買了 switch 1

生成了switch 2

生成了switch 3

購買了 switch 2

生成了switch 4

生成了switch 5

生成了switch 6

購買了 switch 3

生成了switch 7

購買了 switch 4

生成了switch 8

python有序佇列 Python 佇列

所謂佇列 佇列是有序集合,新增操作發生在 尾部 移除操作則發生在 頭部 新元素從尾部進入 佇列,然後一直向前移動到頭部,直到成為下乙個被移除的元素。新新增的元素必須在佇列的尾部等待,在佇列中時間長的元素則排在前面。這種排序 原則被稱作 fifo first in first out 即先進先出,也稱...

Python基礎9 程序和訊息佇列

程序 守護程序 訊息佇列 程序 程序中會有執行緒 主線程 cpu會排程執行緒,程序是為了分配資源 import multiprocessing,time def show for i in range 5 print show time.sleep 0.2 def info for i in ran...

python 清空佇列 python實現 佇列

佇列 佇列的乙個特性是 先進先出 first in first out,fifo python中,同樣可以使用列表來儲存佇列的資料。通過建立乙個佇列類,便可以方便的對佇列進行操作。主要有 入隊 in 出隊 out 清空佇列 empty 設定佇列大小 setsize 獲取隊尾位置 getend 等 p...