1. 程式人生 > 程式設計 >python程式 執行緒佇列queue使用方法解析

python程式 執行緒佇列queue使用方法解析

一、執行緒佇列

queue佇列:使用方法同進程的Queue一樣

如果必須在多個執行緒之間安全地交換資訊時,佇列線上程程式設計中尤其有用。

重要:

q.put() :往佇列裡面放值,當引數block=Ture的時候,timeout引數將會有作用,當佇列已經滿了的時候,在往裡面放值時,block為True程式將會等待timeout的時間,過了時間程式會報錯,block如果為Flase時,程式不會等待直接報錯

q.get() :從佇列裡面取值,當引數block=Ture的時候,timeout引數將會有作用,當佇列已經空了的時候,在從裡面取值時,block為True程式將會等待timeout的時間,過了時間程式會報錯,block如果為Flase時,程式不會等待直接報錯

q.task_done() :使用者使用此方法發出訊號,表示q.get()返回的專案已經被處理。如果呼叫此方法的次數大於從佇列中刪除的專案數量,將引發ValueError異常。

q.join() :生產者將使用此方法進行阻塞,直到佇列中所有專案均被處理。阻塞將持續到為佇列中的每個專案均呼叫q.task_done()方法為止。

二、執行緒佇列的取值方式

2.1 先進先出

class queue.Queue(maxsize=0)

q = queue.Queue() :不加引數代表隊列可以無限的放資料

q = queue.Queue() #不加引數代表隊列可以無限的放資料
q.put('Cecilia陳')
q.put('xichen')
print(q.get())
print(q.get())
'''
結果:
Cecilia陳
xichen
'''

2.2 後進先出

class queue.LifoQueue(maxsize=0)

q = Lifo.Queue() :不加引數代表隊列可以無限的放資料

q = queue.LifoQueue() #不加引數代表隊列可以無線的放資料
q.put('Cecilia陳')
q.put('xichen')

print(q.get())
print(q.get())
'''
結果:
xichen
Cecilia陳
'''

三、佇列存資料時可以設定優先順序

class queue.priorityQueue(maxsize=0)

q = queue.priorityQueue() :不加引數代表隊列可以無限的放資料

3.1 優先順序佇列

# 3.優先順序佇列
q = queue.PriorityQueue() #不加引數代表隊列可以無線的放資料
#put進入一個元組,元組的第一個元素是優先順序(通常是數字,也可以是非數字之間的比較),數字越小優先順序越高
q.put((2,'Cecilia陳'))
q.put((1,'xichen'))
q.put((5,'xuchen'))

print(q.get())
print(q.get())
print(q.get())
'''
# 結果(數字越小優先順序越高,優先順序高的優先出隊):
結果:
(1,'xichen')
(2,'Cecilia陳')
(5,'xuchen')
'''

3.2 方法說明

maxsize是一個整數,它設定可以放置在佇列中的項數的上限。一旦達到此大小,插入將阻塞,直到使用佇列項。如果maxsize小於或等於零,則佇列大小為無窮大。

p.put() :放值的時候,放的是一個元組()

exception queue.Empty :異常佇列。空:當對空的佇列物件呼叫非阻塞 get() 或 get_nowait() 時引發異常,也就是說佇列為空的時候,再取值就會報錯

exception queue.Full :異常佇列。Full:當對已滿的佇列物件呼叫非阻塞put() 或 put_nowait() 時引發異常。也就是說當佇列已滿的時候,再往裡面當值的時候將會報錯

Queue.qsize () :

empty() :如果為空,返回True

Queue.full() :如果已滿,返回True

put_nowait(item) :等同於put(item,False)。

get_nowait() :等同於get(False)。

提供了兩種方法來支援跟蹤已加入佇列的任務是否已被守護程序使用者執行緒完全處理:

task_done() :表示以前加入佇列的任務已經完成。由佇列使用者執行緒使用。對於用於獲取任務的每個get(),後續對task_done()的呼叫告訴佇列任務上的處理已經完成。如果join(當前處於阻塞狀態,那麼在處理完所有項之後,它將繼續執行(這意味著對於已經放入佇列()的每個項,都收到了task_done()呼叫)。

如果呼叫次數超過放置在佇列中的項的次數,則引發ValueError。

Queue.join() :塊直到佇列被消費完畢。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。