Python 3.6.4 queue模組
阿新 • • 發佈:2019-01-27
常用方法
put(item[, block[, timeout]])
向佇列裡新增資料。
引數
item:要放入佇列的資料。
block:可選引數,預設值為True。當值為True時,阻塞呼叫(當棧滿一直無空間可用,阻塞呼叫,直到有棧有空間,或timeout秒後結束。
timeout:阻塞超時,當timeout>0時,阻塞呼叫timeout後結束。
get(block[, timeout])
將佇列資料取出。
引數
block:可選引數,預設值為True。當值為True時,阻塞呼叫(當試圖向空棧取出資料時,阻塞呼叫,直到有棧內有資料,或timeout秒後結束。
timeout:阻塞超時,當timeout>0時,阻塞呼叫timeout後結束。
empty()
判斷佇列是否為空,空返回True,非空返回False
full()
判斷佇列是否為滿,滿返回True,非滿返回False
join()
阻塞呼叫執行緒,直到佇列的所有任務都被處理掉。
只要資料加入佇列,未完成的任務數就會增加。當消費者執行緒呼叫task_done(),未完成的任務數九會減少。當未完成的任務數降至0,join()解除阻塞。
task_done()
意味著上一個任務處理完成,由佇列的消費者執行緒呼叫。每一個get()的呼叫獲得一個任務,task_done()呼叫告訴佇列對應的任務已經完成。
FIFO佇列(First In First Out)
queue.Queue(maxsize=0)
先進先出佇列,當maxsize>0時,佇列資料大小限制為maxsize,當maxsize<=0時,大小無限制。
程式碼:
import queue
q=queue.Queue()
for each in range(5):
q.put(each)
while not q.empty():
print(q.get())
結果:
0
1
2
3
4
LIFO佇列(Last In First Out)
queue.LifoQueue(maxsize=0)
後進先出佇列,當maxsize>0時,佇列資料大小限制為maxsize,當maxsize<=0時,大小無限制。
程式碼:
import queue
q=queue.LifoQueue()
for each in range(5):
q.put(each)
while not q.empty():
print(q.get())
結果:
4
3
2
1
0
優先順序佇列
queue.PriorityQueue(maxsize=0)
優先順序佇列,當maxsize>0時,佇列資料大小限制為maxsize,當maxsize<=0時,大小無限制。
程式碼:
import queue
class job():
def __init__(self,priority,description):
self.priority=priority
self.description=description
def __lt__(self,other):
return self.priority<other.priority
q=queue.PriorityQueue()
q.put(job(10,"priority 10"))
q.put(job(4,"priority 4"))
q.put(job(3,"priority 3"))
q.put(job(1,"priority 1"))
while not q.empty():
print(q.get().description)
結果:
priority 1
priority 3
priority 4
priority 10