Python隊列queue模塊
阿新 • • 發佈:2018-08-16
display int sta star ide print aps als isp
Python中queue模塊常用來處理隊列相關問題
隊列常用於生產者消費者模型,主要功能為提高效率和程序解耦
1. queue模塊的基本使用和相關說明
# -*- coding:utf-8 -*- # Author:Wong Du ‘‘‘ 隊列常用於生產者消費者模型, 主要功能為提高效率和程序解耦 ‘‘‘ import queue """實例化隊列對象不同規則的三種方法""" q1 = queue.Queue(maxsize=2) # 先入先出 q2 = queue.LifoQueue(maxsize=3) # 後入先出,Last in first outq3 = queue.PriorityQueue(maxsize=5) # 根據存儲數據的優先級決定誰先出隊列 """ 添加數據進隊列中,可添加str、list、tuple等 當添加的數據量超過隊列上限的時候,程序會卡住,直到有人從隊列中取出數據 若想讓程序不卡住,可以用put_nowait添加數據和配置block或timeout的put參數 來讓程序拋出異常,從而進行異常處理或其他操作 """ q1.put("caiyun") q1.put( [1, 2, 3, 4, 5] ) # q1.put_nowait(2) # q1.put(2, block=False)# q1.put(2, timeout=3) q2.put("caiyun") q2.put( (1, 2, 3, 4, 5) ) q3.put(("Wong", 123)) q3.put(("Caiyun", 322)) q3.put(("dudu", 98)) """ 獲取隊列中的數據,同理 當隊列中沒有數據的時候,程序會卡住,直到有人添加數據在隊列中 若想讓程序不卡住,可以用get_nowait添加數據和配置block或timeout的put參數 來讓程序拋出異常,從而進行異常處理或其他操作 """ print("\033[32;1mQueue Info\033[0m".center(35,‘-‘)) print(q1.get()) print(q1.get()) # q1.get_nowait() # q1.get(block=False) # q1.get(timeout=3) print("\033[33;1mLifoQueue Info\033[0m".center(35,‘-‘)) print(q2.get()) print(q2.get()) print("\033[34;1mPriorityQueue Info\033[0m".center(35,‘-‘)) print(q3.get()[0]) print(q3.get()) # print(q3.get()) """隊列判斷和計數,判斷是否為空,是否已滿,隊列長度計數""" print(q1.empty()) print(q1.full()) print(q3.qsize())
2. queue模塊的簡單應用
1 # -*- coding:utf-8 -*- 2 # Author:Wong Du 3 4 import time 5 import queue 6 import threading 7 8 q = queue.Queue(maxsize=10) 9 10 def producer(pname): 11 count = 1 12 while True: 13 q.put("baozi%s" % count) 14 print("\033[31;1m[%s] 生產了 [baozi%s]...\033[0m" %(pname, count)) 15 count += 1 16 time.sleep(0.5) 17 18 def consumer(cname): 19 while True: 20 print("\033[33;1m[%s] 收到了 [%s],並把它吃了...\033[0m" %(cname, q.get())) 21 time.sleep(2) 22 23 p1 = threading.Thread(target=producer, args=("Caiyun", )) 24 p1.start() 25 26 c1 = threading.Thread(target=consumer, args=("dudu", )) 27 c2 = threading.Thread(target=consumer, args=("wong", )) 28 c1.start() 29 # c2.start()queue&threading_生產者消費者實例
Python隊列queue模塊