1. 程式人生 > >Python隊列queue模塊

Python隊列queue模塊

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 out
q3 = 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模塊