python中的Queue(隊列)詳解


一、Queue簡介

python中的隊列分類可分為兩種:

1.線程Queue,也就是普通的Queue

2.進程Queue,在多線程與多進程會介紹。

Queue的種類:

  • FIFO

 Queue.Queue(maxsize=0)

FIFO即First in First Out,先進先出。Queue提供了一個基本的FIFO容器,使用方法很簡單,maxsize是個整數,指明了隊列中能存放的數據個數的上限。一旦達到上限,插入會導致阻塞,直到隊列中的數據被消費掉。如果maxsize小於或者等於0,隊列大小沒有限制。

  •  LIFO

Queue.LifoQueue(maxsize=0)

LIFO即Last in First Out,后進先出。與棧的類似,使用也很簡單,maxsize用法同上

  • priority

class Queue.PriorityQueue(maxsize=0)

構造一個優先隊列。maxsize用法同上。

 

基本方法:

   Queue.Queue(maxsize=0)   FIFO, 如果maxsize小於1就表示隊列長度無限
       Queue.LifoQueue(maxsize=0)   LIFO, 如果maxsize小於1就表示隊列長度無限
       Queue.qsize()   返回隊列的大小 
       Queue.empty()   如果隊列為空,返回True,反之False 
       Queue.full()   如果隊列滿了,返回True,反之False
       Queue.get([block[, timeout]])   讀隊列,timeout等待時間 
       Queue.put(item, [block[, timeout]])   寫隊列,timeout等待時間 
       Queue.queue.clear()   清空隊列

 

其他: 

task_done()

意味着之前入隊的一個任務已經完成。由隊列的消費者線程調用。每一個get()調用得到一個任務,接下來的task_done()調用告訴隊列該任務已經處理完畢。

如果當前一個join()正在阻塞,它將在隊列中的所有任務都處理完時恢復執行(即每一個由put()調用入隊的任務都有一個對應的task_done()調用)。

join()

阻塞調用線程,直到隊列中的所有任務被處理掉。

只要有數據被加入隊列,未完成的任務數就會增加。當消費者線程調用task_done()(意味着有消費者取得任務並完成任務),未完成的任務數就會減少。當未完成的任務數降到0,join()解除阻塞。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM