Python3中的queue模塊實現多生產者,多消費者隊列,特別適用於多個線程間的信息的安全交換,主要有三個類
queue.Queue(maxsize=0)
構造一個FIFO(先進先出)的隊列
queue.LifoQueue(maxsize=0)
構造一個LIFO(后進先出)的隊列
queue.PriorityQueue(maxsize=0)
構造一個具有優先級的隊列,存儲的是一個元組(n, value),n為數字代表優先級,數字越小,級別越高
這個模塊定義了兩個異常
queue.Empty
如果隊列中為空,繼續調用非阻塞的get_nowait()會拋出異常
queue.Full
如果隊列已滿,繼續調用非阻塞的put_nowait()會拋出異常

import queue # 以下三個隊列都可以設置最大長度maxsize,默認是無限大 print("-------------queue.Queue----------------") # 線程消息隊列,FIFO(先進先出) q = queue.Queue() q.put("one") q.put("two") q.put("three") print(q.get()) print(q.get()) print(q.get()) # print(q.get(timeout=3)) # 隊列中沒有數據,會阻塞 print("-------------queue.LifoQueue----------------") # 線程消息隊列,LIFO(后進先出) lq = queue.LifoQueue() lq.put("one") lq.put("two") lq.put("three") print(lq.get()) print(lq.get()) print(lq.get()) print("-------------queue.PriorityQueue----------------") # 線程消息隊列,PriorityQueue(優先級的隊列:數字越小優先級越高) pq = queue.PriorityQueue() pq.put((1, "Jet")) pq.put((3, "Jack")) pq.put((2, "Judy")) print(pq.get()) print(pq.get()) print(pq.get())
參考資料
http://python.usyiyi.cn/translate/python_352/library/queue.html