1. 程式人生 > >python基礎學習之佇列queque

python基礎學習之佇列queque

在python2中的佇列模組為Queue,在python3中Queue模組已被重新命名為queue。

Queue----一個同步佇列類
佇列(Queue)模組實現多生產者、多使用者佇列。當必須在多個執行緒之間安全地交換資訊時,它線上程程式設計中特別有用。
這個模組中的Queue類實現了所有必需的鎖定語義。這取決於Python中執行緒支援的可用性。
該模組實現了三種類型的佇列,它們只在檢索條目的順序上有所不同。
  • Queue:普通佇列,FIFO,新增的第一個任務是第一個被檢索到的任務
  • PriorityQueue:優先順序佇列,條目將保持排序(使用heapq模組),並首先檢索最低的值條目。
  • LifoQueue:先進後出的佇列(類似於棧)LIFO,最近新增的條目是第一次被檢索的(像堆疊一樣執行)。
class Queue.Queue(maxsize=0)構建一個FIFO佇列
maxsize是一個整數,它設定可以在佇列中放置的條目數的上界限制。一旦達到這個大小,插入將阻塞,直到佇列中的元素有被取出為止。如果maxsize小於或等於0,佇列大小是無限的。

class Queue.LifoQueue(maxsize=0)構建一個LIFO佇列

maxsize是一個整數,它設定可以在佇列中放置的條目數的上界限制。一旦達到這個大小,插入將阻塞,直到佇列中的元素有被取出為止。如果maxsize小於或等於0,佇列大小是無限的。

class Queue.PriorityQueue(maxsize=0)構建一個優先佇列(級別越低越條目首先被檢索)

maxsize是一個整數,它設定可以在佇列中放置的條目數的上界限制。一旦達到這個大小,插入將阻塞,直到佇列中的元素有被取出為止。如果maxsize小於或等於0,佇列大小是無限的。

Queue的方法
Queue.qsize()返回佇列的大致大小。
Queue.empty()如果佇列為空,則返回True,否則為False。
Queue.full()如果佇列是滿的,返回True,否則為False。
Queue.put(item[, block[, timeout]])將item放入佇列中。
如果可選引數block為True,timeout為None(預設)時,則在必要時會發生阻塞,直到有空閒的可插入地方可用為止。
如果超時是一個正數,它會阻塞最多timeout秒,如果在那個時間內沒有空閒的可插入地方,就會引發佇列已滿的異常。
否則(block為false),如果此時有可用空閒可插入地方,則在佇列中插入item,否則將引發佇列已滿的異常(在這種情況下,超時將被忽略)。

Queue.put_nowait(item)
將item放入佇列中。等價於Queue.put(item, False).
Queue.get([block[, timeout]])從佇列中移除並返回一個元素。
如果可選引數block為True,timeout為None(預設),則在必要時會發生阻塞,直到item可用為止。
如果timeout是一個正數,它會阻塞最多timeout秒,如果在那個時間內沒有可用的item,則會引發Empty異常。

否則(block為false),如果有item立即可用,則返回一個item,否則將引發Empty異常(在這種情況下,超時將被忽略)。

Queue.get_nowait()從佇列中移除並返回一個元素。等價於Queue.get(False).
Queue.task_done()標識以前的佇列任務已完成。用於佇列消費執行緒。
每次通過get()獲取一個任務後,呼叫task_done()來告訴佇列:任務已經完成。
Queue.join()發生阻塞,直到佇列中的所有項都被獲取和處理。
當一個item被新增到佇列中時,未完成任務的計數器就會增加。
每當一個消費者執行緒呼叫task_done()來表明item已經被檢索到並完成了所有工作時,計數器就會減小。
當未完成任務數目下降到0時,join()就會被解除。