1. 程式人生 > >Python 3.6.4 queue模組

Python 3.6.4 queue模組

常用方法

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