標籤:rand star 返回 main 安全 empty lse false 表示
建立一個“隊列”對象
import Queue
q = Queue.Queue(maxsize = 10)
Queue.Queue類即是一個隊列的同步實現。隊列長度可為無限或者有限。可通過Queue的建構函式的選擇性參數maxsize來設定隊列長度。如果maxsize小於1就表示隊列長度無限。
將一個值放入隊列中
q.put(10)
調用隊列對象的put()方法在隊尾插入一個項目。put()有兩個參數,第一個item為必需的,為插入項目的值;第二個block為選擇性參數,預設為
1。如果隊列當前為空白且block為1,put()方法就使調用線程暫停,直到空出一個資料單元。如果block為0,put方法將引發Full異常。
將一個值從隊列中取出
q.get()
調用隊列對象的get()方法從隊頭刪除並返回一個項目。選擇性參數為block,預設為True。如果隊列為空白且block為True,get()就使調用線程暫停,直至有項目可用。如果隊列為空白且block為False,隊列將引發Empty異常。
Python Queue模組有三種隊列及建構函式:
1、Python Queue模組的FIFO隊列先進先出。 class queue.Queue(maxsize)
2、LIFO類似於堆,即先進後出。 class queue.LifoQueue(maxsize)
3、還有一種是優先順序隊列層級越低越先出來。 class queue.PriorityQueue(maxsize)
此包中的常用方法(q = Queue.Queue()):
q.qsize() 返回隊列的大小
q.empty() 如果隊列為空白,返回True,反之False
q.full() 如果隊列滿了,返回True,反之False
q.full 與 maxsize 大小對應
q.get([block[, timeout]]) 擷取隊列,timeout等待時間
q.get_nowait() 相當q.get(False)
非阻塞 q.put(item) 寫入隊列,timeout等待時間
q.put_nowait(item) 相當q.put(item, False)
q.task_done() 在完成一項工作之後,q.task_done() 函數向任務已經完成的隊列發送一個訊號
q.join() 實際上意味著等到隊列為空白,再執行別的操作
列表可以實現隊列的作用,為什麼還要有隊列?
因為在多線程中列表的元素可以被同時取到是不安全的,但是隊列不能同時取到。
執行個體:
import threading,queuefrom time import sleepfrom random import randintclass Production(threading.Thread): def run(self): while True: r=randint(0,100) q.put(r) print("生產出來%s號包子"%r) sleep(1)class Proces(threading.Thread): def run(self): while True: re=q.get() print("吃掉%s號包子"%re)if __name__=="__main__": q=queue.Queue(10) threads=[Production(),Production(),Production(),Proces()] for t in threads: t.start()
python threading之queue