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

二、Queue模塊常用函數(shù)介紹
queue模塊是內(nèi)置的,不需要安裝直接導(dǎo)入就可以了。
(1)創(chuàng)建一個(gè)Queue對象
import queue # 創(chuàng)建一個(gè)隊(duì)列實(shí)例 q = queue.Queue(maxsize=20) # 可選參數(shù),默認(rèn)為無限大
(2)入隊(duì)
# 導(dǎo)入Python標(biāo)準(zhǔn)庫中的queue模塊,該模塊提供了線程安全的隊(duì)列數(shù)據(jù)結(jié)構(gòu)
import queue
# 創(chuàng)建一個(gè)Queue對象,可以理解為初始化一個(gè)隊(duì)列,參數(shù)maxsize默認(rèn)為0,表示隊(duì)列大小無限制
q = queue.Queue()
# 使用for循環(huán)將數(shù)字0到9依次放入隊(duì)列中
# put方法用于將元素放入隊(duì)列尾部,即執(zhí)行入隊(duì)操作
for i in range(10):
q.put(i) # 這里每執(zhí)行一次,就將i(0-9)作為一個(gè)元素放入隊(duì)列中
# 此時(shí),隊(duì)列q中按照先進(jìn)先出(FIFO)原則存儲了數(shù)字0-9(3)出隊(duì)
# 導(dǎo)入Python內(nèi)置的queue模塊,其中包含線程安全的隊(duì)列數(shù)據(jù)結(jié)構(gòu)
import queue
# 創(chuàng)建一個(gè)Queue對象,即初始化一個(gè)空隊(duì)列
q = queue.Queue()
# 使用for循環(huán)將0到9這10個(gè)整數(shù)依次入隊(duì)
# put方法將元素添加到隊(duì)列的末尾
for i in range(10):
q.put(i) # 每次循環(huán)都將i作為元素放入隊(duì)列中
# 此時(shí)q中已有元素,下面開始出隊(duì)
# 出隊(duì)的三種方式
q.get()
q.get_nowait()
q.get(block=False) # 和get_nowait()一樣功能
# 循環(huán)出隊(duì)
for i in range(q.qsize()):
print(q.get())(4)判空
# 導(dǎo)入Python內(nèi)置的queue模塊,其中包含線程安全的隊(duì)列數(shù)據(jù)結(jié)構(gòu)
import queue
# 創(chuàng)建一個(gè)Queue對象,即初始化一個(gè)空隊(duì)列
q = queue.Queue()
# 使用for循環(huán)將0到9這10個(gè)整數(shù)依次入隊(duì)
# put方法將元素添加到隊(duì)列的末尾
for i in range(10):
q.put(i) # 每次循環(huán)都將i作為元素放入隊(duì)列中
# 使用while循環(huán)檢查隊(duì)列是否為空
# 當(dāng)隊(duì)列不為空時(shí),持續(xù)執(zhí)行循環(huán)體內(nèi)的操作
while not q.empty():
# 使用get方法從隊(duì)列中取出并移除一個(gè)元素
# 默認(rèn)情況下,get方法會(huì)阻塞直到有元素可用(除非設(shè)置了非阻塞模式)
data = q.get()
# 打印從隊(duì)列中取出的元素
print(data)
# 當(dāng)隊(duì)列為空時(shí),while循環(huán)結(jié)束
# 此時(shí)所有之前入隊(duì)的整數(shù)0-9會(huì)被按照先進(jìn)先出(FIFO)的原則依次出隊(duì)并打印(5)判滿
import queue
# 初始化一個(gè)容量為5的隊(duì)列
q = queue.Queue(maxsize=5)
# 入隊(duì)操作
for i in range(10):
# 在入隊(duì)前檢查隊(duì)列是否已滿
if q.full():
print("Queue is full, cannot insert more items.")
else:
q.put(i)
# 若隊(duì)列已滿,可以選擇等待一段時(shí)間后重試或其他處理策略
if q.full():
time.sleep(1) # 假設(shè)休眠一秒后重試
continue
while not q.empty():
data = q.get()
print(data)(6)獲取隊(duì)列長度
import queue
# 創(chuàng)建一個(gè)隊(duì)列
q = queue.Queue()
# 將10個(gè)元素放入隊(duì)列
for i in range(10):
q.put(i)
# 打印隊(duì)列長度
print(f"Queue size before processing: {q.qsize()}")
# 處理隊(duì)列中的元素,同時(shí)打印隊(duì)列長度
while not q.empty():
data = q.get()
print(f"Processing element: {data}, current queue size: {q.qsize()}")
# 在處理過程中,每次從隊(duì)列中取出一個(gè)元素后,隊(duì)列長度都會(huì)減一(7)task_done() 和 unfinished_tasks
import queue
import threading
# 創(chuàng)建一個(gè)隊(duì)列
q = queue.Queue()
# 生產(chǎn)者線程將任務(wù)放入隊(duì)列
def producer():
for i in range(10):
q.put(i)
print(f"Producer added task: {i}")
# 消費(fèi)者線程從隊(duì)列中取出并處理任務(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}")
# 檢查隊(duì)列是否為空且所有任務(wù)都已經(jīng)完成
if q.empty() and q.unfinished_tasks == 0:
print("All tasks completed, exiting consumer.")
break
# 創(chuàng)建并啟動(dòng)生產(chǎn)者線程
p = threading.Thread(target=producer)
p.start()
p.join() # 確保生產(chǎn)者線程完成任務(wù)
# 創(chuàng)建并啟動(dòng)消費(fèi)者線程
c = threading.Thread(target=consumer)
c.start()
c.join() # 等待消費(fèi)者線程處理完所有任務(wù)并退出
# 由于消費(fèi)者線程在所有任務(wù)完成后退出,所以在此處不需要再次檢查隊(duì)列狀態(tài)(8)join
import queue
import threading
# 創(chuàng)建一個(gè)隊(duì)列
q = queue.Queue()
# 生產(chǎn)者線程將任務(wù)放入隊(duì)列
def producer():
for i in range(10):
q.put(i)
print("Producer has added all tasks.")
# 消費(fèi)者線程從隊(duì)列中取出并處理任務(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}")
# 檢查隊(duì)列是否為空
if q.empty():
print("No more tasks in the queue.")
break
# 創(chuàng)建并啟動(dòng)生產(chǎn)者線程
p = threading.Thread(target=producer)
p.start()
p.join() # 確保生產(chǎn)者線程完成任務(wù)添加
# 創(chuàng)建并啟動(dòng)消費(fèi)者線程
c = threading.Thread(target=consumer)
c.start()
# 主線程等待所有任務(wù)完成
q.join() # 阻塞主線程,直到所有從隊(duì)列中取出的任務(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如何在Web環(huán)境中使用Matplotlib進(jìn)行數(shù)據(jù)可視化
數(shù)據(jù)可視化是數(shù)據(jù)科學(xué)和分析中一個(gè)至關(guān)重要的部分,它能幫助我們更好地理解和解釋數(shù)據(jù),在現(xiàn)代應(yīng)用中,越來越多的開發(fā)者希望能夠?qū)?shù)據(jù)可視化結(jié)果展示在網(wǎng)頁上,本文將介紹如何在 Web 環(huán)境中使用 Matplotlib 進(jìn)行可視化,包括基本概念、集成方式以及實(shí)用示例2024-11-11
python動(dòng)畫manim中的顏色ManimColor的使用方法詳解
這篇文章主要介紹了python動(dòng)畫manim中的顏色ManimColor的使用方法,本文通過實(shí)例圖文展示給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08
python一行sql太長折成多行并且有多個(gè)參數(shù)的方法
今天小編就為大家分享一篇python一行sql太長折成多行并且有多個(gè)參數(shù)的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
python基礎(chǔ)學(xué)習(xí)之生成器與文件系統(tǒng)知識總結(jié)
本文是參考《python數(shù)據(jù)分析》的附錄對生成器和文件系統(tǒng)結(jié)合案例的一個(gè)簡單回顧,文中對python生成器與文件系統(tǒng)作了非常詳細(xì)的介紹,對正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05
Python實(shí)現(xiàn)的一個(gè)簡單LRU cache
這篇文章主要介紹了Python實(shí)現(xiàn)的一個(gè)簡單LRU cache,本文根據(jù)實(shí)際需求總結(jié)而來,需要的朋友可以參考下2014-09-09

