欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中queue模塊常用函數(shù)使用方法

 更新時(shí)間:2024年11月25日 09:46:05   作者:小oo呆  
這篇文章主要介紹了Python的Queue模塊,包括其基本概念、常用函數(shù)和用法,Queue模塊是Python標(biāo)準(zhǔn)庫(kù)中的一部分,無(wú)需額外安裝即可使用,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、Queue模塊的知識(shí)點(diǎn)思維導(dǎo)圖

二、Queue模塊常用函數(shù)介紹

queue模塊是內(nèi)置的,不需要安裝直接導(dǎo)入就可以了。

(1)創(chuàng)建一個(gè)Queue對(duì)象

import queue

# 創(chuàng)建一個(gè)隊(duì)列實(shí)例
q = queue.Queue(maxsize=20)   # 可選參數(shù),默認(rèn)為無(wú)限大

(2)入隊(duì)

# 導(dǎo)入Python標(biāo)準(zhǔn)庫(kù)中的queue模塊,該模塊提供了線程安全的隊(duì)列數(shù)據(jù)結(jié)構(gòu)
import queue

# 創(chuàng)建一個(gè)Queue對(duì)象,可以理解為初始化一個(gè)隊(duì)列,參數(shù)maxsize默認(rèn)為0,表示隊(duì)列大小無(wú)限制
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)原則存儲(chǔ)了數(shù)字0-9

(3)出隊(duì)

# 導(dǎo)入Python內(nèi)置的queue模塊,其中包含線程安全的隊(duì)列數(shù)據(jù)結(jié)構(gòu)
import queue

# 創(chuàng)建一個(gè)Queue對(duì)象,即初始化一個(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對(duì)象,即初始化一個(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ì)列長(zhǎng)度

import queue

# 創(chuàng)建一個(gè)隊(duì)列
q = queue.Queue()

# 將10個(gè)元素放入隊(duì)列
for i in range(10):
    q.put(i)

# 打印隊(duì)列長(zhǎng)度
print(f"Queue size before processing: {q.qsize()}")

# 處理隊(duì)列中的元素,同時(shí)打印隊(duì)列長(zhǎng)度
while not q.empty():
    data = q.get()
    print(f"Processing element: {data}, current queue size: {q.qsize()}")

# 在處理過程中,每次從隊(duì)列中取出一個(gè)元素后,隊(duì)列長(zhǎng)度都會(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論