1. 程式人生 > >Python 佇列Queue和PriorityQueue

Python 佇列Queue和PriorityQueue

Python的Queue模組適用於多執行緒程式設計的FIFO實現。它可用於在生產者(producer)和消費者(consumer)之間執行緒安全(thread-safe)地傳遞訊息或其它資料,因此多個執行緒可以共用同一個Queue例項。

FIFO: First in, First out.先進先出
LIFO: Last in, First out.後進先出

from queue import Queue#先進先出佇列
from queue import PriorityQueue#優先順序佇列
import time
#佇列:先進先出
q = Queue()#建立一個空佇列,佇列大小沒有指定
#判斷佇列是是否為空
#當一個佇列為空的時候如果再用get
取則會堵塞,所以取佇列的時候一般是用到 #get_nowait()方法,這種方法在向一個空佇列取值的時候會拋一個Empty異常 #所以更常用的方法是先判斷一個佇列是否為空,如果不為空則取值 print(q.empty()) #佇列的操作:存--put()--get() q.put('page1') q.put('page2') q.put('page3') print(q.empty()) #判斷佇列是否已經滿了 print(q.full()) q1 = Queue(3)#在建立佇列時,指定佇列大小(表示該佇列最多能存多少個元素) q1.put('1') q1.put('1') q1.
put('1') print(q1.full()) q2 = Queue(3) q2.put('1') q2.put('2') q2.put('3') value = q2.get()#遵循的原則是:先進先出 print(value) print(q2.full()) #存資料---阻塞 q3 = Queue(3) q3.put(1) q3.put(2) q3.put(3) # q3.put(4)#如果佇列已經滿了,等著(阻塞),一直等到佇列騰出空間,然後把值存入到隊列當中。 #取資料--阻塞 q4 = Queue(3) q4.put(1) value = q4.get()#1,此時佇列為空 print
('q4:',value) # value = q4.get()#阻塞,直到隊列當中有新值的時候,取出,結束阻塞。 #非阻塞 q5 = Queue(3) q5.put(1) #1.print('q5.qsize:',q5.qsize())#當前隊列當中的元素個數 #方法1: # while not q5.empty(): # value2 = q5.get(block=False)#block為Ture,表示阻塞,否則為非阻塞。非阻塞就是“強取” # print('q5:',value2) #方法2while q5.qsize()>0: value2 = q5.get(block=False) print('q5:',value2) print('q5.qsize:',q5.qsize()) #存 q6 = Queue(3) #方法1: # print(q6.maxsize)#得到佇列最大容量 # i = 0 # while i<q6.maxsize: # q6.put(i) # i+=1 #方法2while not q6.full(): q6.put(1,block=False)#非阻塞 '''------------------------------其它的屬性和方法-----------------------------''' q7 = Queue(3) # q7.get(block=False) print(time.time()) try: q7.get(timeout=2)#阻塞時長 except: pass print(time.time()) q8 = Queue(3) # q8.get_nowait()#強取 '''------------------------------優先順序佇列-----------------------------''' q = PriorityQueue() # 格式:q.put((數字,)) #特點:數字越小,優先順序越高 q.put((1,'lori')) q.put((-1,'Jseon')) q.put((10,'King')) i = 0 while i<q.qsize(): print(q.get())