Python中queue模塊常用函數(shù)使用方法
一、Queue模塊的知識點(diǎn)思維導(dǎo)圖

二、Queue模塊常用函數(shù)介紹
queue模塊是內(nèi)置的,不需要安裝直接導(dǎo)入就可以了。
(1)創(chuàng)建一個Queue對象
import queue # 創(chuàng)建一個隊列實(shí)例 q = queue.Queue(maxsize=20) # 可選參數(shù),默認(rèn)為無限大
(2)入隊
# 導(dǎo)入Python標(biāo)準(zhǔn)庫中的queue模塊,該模塊提供了線程安全的隊列數(shù)據(jù)結(jié)構(gòu)
import queue
# 創(chuàng)建一個Queue對象,可以理解為初始化一個隊列,參數(shù)maxsize默認(rèn)為0,表示隊列大小無限制
q = queue.Queue()
# 使用for循環(huán)將數(shù)字0到9依次放入隊列中
# put方法用于將元素放入隊列尾部,即執(zhí)行入隊操作
for i in range(10):
q.put(i) # 這里每執(zhí)行一次,就將i(0-9)作為一個元素放入隊列中
# 此時,隊列q中按照先進(jìn)先出(FIFO)原則存儲了數(shù)字0-9(3)出隊
# 導(dǎo)入Python內(nèi)置的queue模塊,其中包含線程安全的隊列數(shù)據(jù)結(jié)構(gòu)
import queue
# 創(chuàng)建一個Queue對象,即初始化一個空隊列
q = queue.Queue()
# 使用for循環(huán)將0到9這10個整數(shù)依次入隊
# put方法將元素添加到隊列的末尾
for i in range(10):
q.put(i) # 每次循環(huán)都將i作為元素放入隊列中
# 此時q中已有元素,下面開始出隊
# 出隊的三種方式
q.get()
q.get_nowait()
q.get(block=False) # 和get_nowait()一樣功能
# 循環(huán)出隊
for i in range(q.qsize()):
print(q.get())(4)判空
# 導(dǎo)入Python內(nèi)置的queue模塊,其中包含線程安全的隊列數(shù)據(jù)結(jié)構(gòu)
import queue
# 創(chuàng)建一個Queue對象,即初始化一個空隊列
q = queue.Queue()
# 使用for循環(huán)將0到9這10個整數(shù)依次入隊
# put方法將元素添加到隊列的末尾
for i in range(10):
q.put(i) # 每次循環(huán)都將i作為元素放入隊列中
# 使用while循環(huán)檢查隊列是否為空
# 當(dāng)隊列不為空時,持續(xù)執(zhí)行循環(huán)體內(nèi)的操作
while not q.empty():
# 使用get方法從隊列中取出并移除一個元素
# 默認(rèn)情況下,get方法會阻塞直到有元素可用(除非設(shè)置了非阻塞模式)
data = q.get()
# 打印從隊列中取出的元素
print(data)
# 當(dāng)隊列為空時,while循環(huán)結(jié)束
# 此時所有之前入隊的整數(shù)0-9會被按照先進(jìn)先出(FIFO)的原則依次出隊并打印(5)判滿
import queue
# 初始化一個容量為5的隊列
q = queue.Queue(maxsize=5)
# 入隊操作
for i in range(10):
# 在入隊前檢查隊列是否已滿
if q.full():
print("Queue is full, cannot insert more items.")
else:
q.put(i)
# 若隊列已滿,可以選擇等待一段時間后重試或其他處理策略
if q.full():
time.sleep(1) # 假設(shè)休眠一秒后重試
continue
while not q.empty():
data = q.get()
print(data)(6)獲取隊列長度
import queue
# 創(chuàng)建一個隊列
q = queue.Queue()
# 將10個元素放入隊列
for i in range(10):
q.put(i)
# 打印隊列長度
print(f"Queue size before processing: {q.qsize()}")
# 處理隊列中的元素,同時打印隊列長度
while not q.empty():
data = q.get()
print(f"Processing element: {data}, current queue size: {q.qsize()}")
# 在處理過程中,每次從隊列中取出一個元素后,隊列長度都會減一(7)task_done() 和 unfinished_tasks
import queue
import threading
# 創(chuàng)建一個隊列
q = queue.Queue()
# 生產(chǎn)者線程將任務(wù)放入隊列
def producer():
for i in range(10):
q.put(i)
print(f"Producer added task: {i}")
# 消費(fèi)者線程從隊列中取出并處理任務(wù)
def consumer():
while True:
task = q.get() # 獲取任務(wù)
print(f"Consumer started working on task: {task}")
# 這里模擬任務(wù)處理過程
# 實(shí)際應(yīng)用中,此處應(yīng)替換為實(shí)際的任務(wù)處理邏輯
process_task(task)
# 任務(wù)處理完畢,調(diào)用 task_done()
q.task_done()
print(f"Consumer finished task: {task}")
# 檢查隊列是否為空且所有任務(wù)都已經(jīng)完成
if q.empty() and q.unfinished_tasks == 0:
print("All tasks completed, exiting consumer.")
break
# 創(chuàng)建并啟動生產(chǎn)者線程
p = threading.Thread(target=producer)
p.start()
p.join() # 確保生產(chǎn)者線程完成任務(wù)
# 創(chuàng)建并啟動消費(fèi)者線程
c = threading.Thread(target=consumer)
c.start()
c.join() # 等待消費(fèi)者線程處理完所有任務(wù)并退出
# 由于消費(fèi)者線程在所有任務(wù)完成后退出,所以在此處不需要再次檢查隊列狀態(tài)(8)join
import queue
import threading
# 創(chuàng)建一個隊列
q = queue.Queue()
# 生產(chǎn)者線程將任務(wù)放入隊列
def producer():
for i in range(10):
q.put(i)
print("Producer has added all tasks.")
# 消費(fèi)者線程從隊列中取出并處理任務(wù)
def consumer():
while True:
task = q.get() # 獲取任務(wù)
print(f"Consumer started working on task: {task}")
# 這里模擬任務(wù)處理過程
# 實(shí)際應(yīng)用中,此處應(yīng)替換為實(shí)際的任務(wù)處理邏輯
process_task(task)
# 任務(wù)處理完畢,調(diào)用 task_done()
q.task_done()
print(f"Consumer finished task: {task}")
# 檢查隊列是否為空
if q.empty():
print("No more tasks in the queue.")
break
# 創(chuàng)建并啟動生產(chǎn)者線程
p = threading.Thread(target=producer)
p.start()
p.join() # 確保生產(chǎn)者線程完成任務(wù)添加
# 創(chuàng)建并啟動消費(fèi)者線程
c = threading.Thread(target=consumer)
c.start()
# 主線程等待所有任務(wù)完成
q.join() # 阻塞主線程,直到所有從隊列中取出的任務(wù)都被標(biāo)記為完成
print("All tasks have been processed and marked as done.")總結(jié)
到此這篇關(guān)于Python中queue模塊常用函數(shù)使用的文章就介紹到這了,更多相關(guān)Python中queue模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用python字典統(tǒng)計CSV數(shù)據(jù)的步驟和示例代碼
為了使用Python字典來統(tǒng)計CSV數(shù)據(jù),我們可以使用內(nèi)置的csv模塊來讀取CSV文件,并使用字典來存儲統(tǒng)計信息,以下是一個詳細(xì)的步驟和完整的代碼示例,需要的朋友可以參考下2024-12-12
舉例講解Python設(shè)計模式編程的代理模式與抽象工廠模式
這篇文章主要介紹了Python編程的代理模式與抽象工廠模式,文中舉了兩個簡單的小例子來說明這兩種設(shè)計模式的思路在Python編程中的體現(xiàn),需要的朋友可以參考下2016-01-01
Python中OpenCV?Tutorials?20??高動態(tài)范圍成像的實(shí)現(xiàn)步驟
這篇文章主要介紹了OpenCV?Tutorials?20?-?高動態(tài)范圍成像,本文還給大家展示了一種稱為曝光融合的替代方法,它可以產(chǎn)生低動態(tài)范圍的圖像,需要的朋友可以參考下2022-06-06
python-pymysql獲取字段名稱-獲取內(nèi)容方式
這篇文章主要介紹了python-pymysql獲取字段名稱-獲取內(nèi)容方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
使用Python實(shí)現(xiàn)快速搭建本地HTTP服務(wù)器
這篇文章主要介紹了如何使用Python快速搭建本地HTTP服務(wù)器,輕松實(shí)現(xiàn)一鍵 HTTP 文件共享,同時結(jié)合二維碼技術(shù),讓訪問更簡單,感興趣的小伙伴可以了解下2025-04-04
python函數(shù)裝飾器之帶參數(shù)的函數(shù)和帶參數(shù)的裝飾器用法示例
這篇文章主要介紹了python函數(shù)裝飾器之帶參數(shù)的函數(shù)和帶參數(shù)的裝飾器用法,結(jié)合實(shí)例形式分析了Python函數(shù)裝飾器中函數(shù)帶多個參數(shù)以及裝飾器帶有多個參數(shù)的具體原理與實(shí)現(xiàn)方法,需要的朋友可以參考下2019-11-11

