最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2024年11月25日 09:46:05   作者:小oo呆  
這篇文章主要介紹了Python的Queue模塊,包括其基本概念、常用函數(shù)和用法,Queue模塊是Python標(biāo)準(zhǔn)庫中的一部分,無需額外安裝即可使用,文中通過代碼介紹的非常詳細(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)為無限大

(2)入隊(duì)

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

# 創(chuàng)建一個(gè)Queue對(duì)象,可以理解為初始化一個(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)原則存儲(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)文章

  • Python 移動(dòng)光標(biāo)位置的方法

    Python 移動(dòng)光標(biāo)位置的方法

    今天小編就為大家分享一篇Python 移動(dòng)光標(biāo)位置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • django-初始配置(純手寫)詳解

    django-初始配置(純手寫)詳解

    這篇文章主要介紹了django-初始配置(純手寫)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 詳解Python如何在Web環(huán)境中使用Matplotlib進(jìn)行數(shù)據(jù)可視化

    詳解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的使用方法詳解

    這篇文章主要介紹了python動(dòng)畫manim中的顏色ManimColor的使用方法,本文通過實(shí)例圖文展示給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • 安裝pyinstaller遇到的各種問題(小結(jié))

    安裝pyinstaller遇到的各種問題(小結(jié))

    這篇文章主要介紹了安裝pyinstaller遇到的各種問題(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python一行sql太長(zhǎng)折成多行并且有多個(gè)參數(shù)的方法

    python一行sql太長(zhǎng)折成多行并且有多個(gè)參數(shù)的方法

    今天小編就為大家分享一篇python一行sql太長(zhǎng)折成多行并且有多個(gè)參數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python采集C站高校信息實(shí)戰(zhàn)示例

    Python采集C站高校信息實(shí)戰(zhàn)示例

    這篇文章主要為大家介紹了Python采集C站高校信息實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 詳解django中url路由配置及渲染方式

    詳解django中url路由配置及渲染方式

    這篇文章主要介紹了詳解django中url路由配置及渲染方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • python基礎(chǔ)學(xué)習(xí)之生成器與文件系統(tǒng)知識(shí)總結(jié)

    python基礎(chǔ)學(xué)習(xí)之生成器與文件系統(tǒng)知識(shí)總結(jié)

    本文是參考《python數(shù)據(jù)分析》的附錄對(duì)生成器和文件系統(tǒng)結(jié)合案例的一個(gè)簡(jiǎn)單回顧,文中對(duì)python生成器與文件系統(tǒng)作了非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Python實(shí)現(xiàn)的一個(gè)簡(jiǎn)單LRU cache

    Python實(shí)現(xiàn)的一個(gè)簡(jiǎn)單LRU cache

    這篇文章主要介紹了Python實(shí)現(xiàn)的一個(gè)簡(jiǎn)單LRU cache,本文根據(jù)實(shí)際需求總結(jié)而來,需要的朋友可以參考下
    2014-09-09

最新評(píng)論

图木舒克市| 工布江达县| 古交市| 右玉县| 古蔺县| 秀山| 安泽县| 砀山县| 江永县| 沅江市| 湘乡市| 庆云县| 龙江县| 曲周县| 阳城县| 奉节县| 镇巴县| 祁东县| 沭阳县| 建平县| 饶河县| 台中县| 镇康县| 香格里拉县| 从江县| 长春市| 永靖县| 新源县| 资阳市| 泰兴市| 会理县| 阿拉善右旗| 维西| 英德市| 张家口市| 纳雍县| 曲周县| 苍山县| 纳雍县| 清徐县| 安吉县|