Queue是python標準函式庫中的執行緒安全的佇列(FIFO)實作,提供了一個適用於多執行緒程式設計的先進先出的資料結構,即佇列,用來在生產者與消費者執行緒之間的訊息傳遞
class Queue.Queue(maxsize=0)
FIFO即First in First Out,先進先出。 Queue提供了一個基本的FIFO容器,使用方法很簡單,maxsize是個整數,指明了佇列中能存放的資料個數的上限。一旦達到上限,插入會導致阻塞,直到隊列中的資料被消費掉。如果maxsize小於或等於0,則佇列大小沒有限制。
舉栗子:
1 import Queue2 3 q = Queue.Queue()4 5 for i in range(5):6 q.put(i)7 8 while not q.empty():9 print q.get()
#輸出:
01 2 3 4
LIFO佇列
class Queue.LifoQueue(maxsize=0)
LIFO即Last in First Out,後進先出。與堆疊的類似,使用也很簡單,maxsize用法同上再舉個栗子:1 import Queue2 3 q = Queue.LifoQueue()4 5 for i in range(5):6 q.put(i)7 8 while not q.empty():9 print q.get()
4 3 2 10
可以看到僅僅是將
Queue.Quenu類別
#優先級佇列
class Queue.PriorityQueue(maxsize=0)
建構一個優先權佇列。 maxsize用法同上。import Queueimport threadingclass Job(object):def __init__(self, priority, description): self.priority = priority self.description = descriptionprint 'Job:',descriptionreturndef __cmp__(self, other):return cmp(self.priority, other.priority) q = Queue.PriorityQueue() q.put(Job(3, 'level 3 job')) q.put(Job(10, 'level 10 job')) q.put(Job(1, 'level 1 job'))def process_job(q):while True: next_job = q.get()print 'for:', next_job.description q.task_done() workers = [threading.Thread(target=process_job, args=(q,)), threading.Thread(target=process_job, args=(q,)) ]for w in workers: w.setDaemon(True) w.start() q.join() 结果 Job: level 3 job Job: level 10 job Job: level 1 jobfor: level 1 jobfor: level 3 jobfor: job: level 10 job
#task_done()
意味著先前入隊的一個任務已經完成。由隊列的消費者線程呼叫。每一個get()呼叫得到一個任務,接下來的task_done()呼叫告訴佇列該任務已經處理完畢。join()
阻塞呼叫線程,直到佇列中的所有任務都被處理掉。put(item[, block[, timeout]])
其非阻斷版本為
put_nowait
get([block[, timeout]])
put方法
以上是Python的queue模組詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!