亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python中的queue隊(duì)列類型及函數(shù)用法

 更新時(shí)間:2022年09月28日 09:17:32   作者:wcl1800  
這篇文章主要介紹了python中的queue隊(duì)列類型及函數(shù)用法,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

python queue隊(duì)列類型及函數(shù)

1.隊(duì)列的種類

Python queue模塊的FIFO隊(duì)列先進(jìn)先出。 class queue.Queue(maxsize)

LIFO類似于堆,即先進(jìn)后出。 class queue.LifoQueue(maxsize)

還有一種是優(yōu)先級隊(duì)列級別越低越先出來。 class queue.PriorityQueue(maxsize)

import queue

# 先進(jìn)先出隊(duì)列
queue_obj = queue.Queue()

for i in range(3):
? ? queue_obj.put(i)

for i in range(3):
? ? print(queue_obj.get())

"""執(zhí)行結(jié)果
0
1
2
"""

# 先進(jìn)后出隊(duì)列,類似于堆棧
queue_obj = queue.LifoQueue()

for i in range(3):
? ? queue_obj.put(i)

for i in range(3):
? ? print(queue_obj.get())

"""執(zhí)行結(jié)果
2
1
0
"""

# 優(yōu)先級隊(duì)列
import Queue
import threading

class Job(object):
? ? def __init__(self, priority, description):
? ? ? ? self.priority = priority
? ? ? ? self.description = description
? ? ? ? print 'Job:',description
? ? ? ? return
? ? def __cmp__(self, other):
? ? ? ? return cmp(self.priority, other.priority)

q = Queue.PriorityQueue()

q.put(Job(3, 'level 3 job'))
q.put(Job(10, 'level 10 job'))
q.put(Job(1, 'level 1 job'))

def process_job(q):
? ? while True:
? ? ? ? next_job = q.get()
? ? ? ? print 'for:', next_job.description
? ? ? ? q.task_done()

workers = [threading.Thread(target=process_job, args=(q,)),
? ? ? ? threading.Thread(target=process_job, args=(q,))
? ? ? ? ]

for w in workers:
? ? w.setDaemon(True)
? ? w.start()

q.join()

2.隊(duì)列函數(shù)

maxsize = 10
queue_obj = queue.Queue(maxsize)  # maxsize 代表隊(duì)列的上限, 如果隊(duì)列已滿, 則插入時(shí)需要等待, maxsize為零或負(fù)數(shù)時(shí).隊(duì)列沒有限制

queue_obj.get(block=True, timeout=None)  # block為True時(shí),表示等待獲取,直至timeout超時(shí)
queue_obj.get_nowait()  # 當(dāng)獲取不到元素時(shí),報(bào)錯(cuò)

queue_obj.put(item="待插入的元素", block=True, timeout=None)  # block為True時(shí),表示等待插入,直至timeout超時(shí)
queue_obj.put_nowait('待插入的元素')  # 當(dāng)不能插入元素時(shí)報(bào)錯(cuò)

queue_obj.empty()  # 隊(duì)列為空時(shí),返回True

queue_obj.full()  # 如果隊(duì)列滿時(shí),返回True

queue_obj.task_done()  # 在每次獲取隊(duì)列中的元素, 操作完成之后, 調(diào)用該函數(shù)告訴隊(duì)列我已經(jīng)使用完成, 主要是給join函數(shù)使用
queue_obj.join()  # 等待隊(duì)列內(nèi)的元素全部被獲取后, 再接觸阻塞(直至所有的任務(wù)全部task_done)

"""下面的例子驗(yàn)證toask_done和join的關(guān)系"""
for i in range(3):
    queue_obj.put(i)  # 這里像隊(duì)列中添加三個(gè)元素

queue_obj.get()  # 這里獲取隊(duì)列中的消息
queue_obj.task_done()

queue_obj.get()  # 這里獲取隊(duì)列中的消息
queue_obj.task_done()

queue_obj.get()  # 這里獲取隊(duì)列中的消息
queue_obj.task_done()

queue_obj.join()
print('直至隊(duì)列中的所有元素全部都被取出, join函數(shù)才不會阻塞, 如果只執(zhí)行了兩次task_done函數(shù), 則join會一直阻塞')

python 隊(duì)列類及其方法

1.Python的隊(duì)列類型

from queue import Queue, LifiQueue, PriorityQueue, SimpleQueue
  • FIFO(先入先出)Queue(maxsize=0):FIFO隊(duì)列的構(gòu)造函數(shù)。maxsize是一個(gè)整數(shù),用于設(shè)置放入隊(duì)列中數(shù)據(jù)的上限。一旦達(dá)到此大小,插入將被阻塞。如果maxsize<=0,則隊(duì)列大小為無限。
  • LIFO(后進(jìn)先出)LifoQueue(maxsize=0):LIFO隊(duì)列的構(gòu)造函數(shù),其它同上。
  • 優(yōu)先級隊(duì)列 PriorityQueue(maxsize=0):優(yōu)先級隊(duì)列的構(gòu)造函數(shù),其它同上。
  • SimpleQueue:FIFO隊(duì)列的簡單形式,缺少諸如任務(wù)跟蹤之類的高級功能。
  • Empty:在空對象上調(diào)用get()方法,引發(fā)的異常隊(duì)列。
  • Full:在已滿的對象上調(diào)用put()方法,引發(fā)的異常隊(duì)列。

2.隊(duì)列對象(適用Queue、LifoQueue和PriorityQueue)

qsize()

  • 返回隊(duì)列的大小。
  • 注意qsize()>0不能保證后續(xù)的get()不會阻塞,qsize()<maxsize也不能保證對get()的后續(xù)調(diào)用不會阻塞。

empty()

  • 如果隊(duì)列是空的返回True,否則返回False。
  • 如果返回True不能保證后續(xù)對put()的調(diào)用都不會阻塞。如果返回False也不能保證對get()的后續(xù)調(diào)用不會阻塞。

full()

  • 如果隊(duì)列滿了返回True,否則返回False。
  • 如果返回True不能保證對get()的后續(xù)調(diào)用不會阻塞。如果full返回False也不能保證后續(xù)對put()的調(diào)用不會阻塞。

put(item, block=True, timeout=None)

  • 將數(shù)據(jù)插入隊(duì)列中。
  • 如果block=True, timeout=None則在必要時(shí)進(jìn)行阻塞,直到隊(duì)列有空間為止。如果timeout=正數(shù),則它最多超時(shí)正數(shù)秒。Full隊(duì)列如果在該時(shí)間內(nèi)沒有空間可用,會引發(fā)異常。如果block=False,隊(duì)列有空間,則將數(shù)據(jù)放入隊(duì)列(超時(shí)被忽略),否則引發(fā)Full異常。

put_nowait(item)

  • 等同于put(item, False)。

get(block=True, timeout=None)

  • 從隊(duì)列中刪除并返回一個(gè)數(shù)據(jù)。
  • 如果block=True, timeout=None則在必要時(shí)進(jìn)行阻塞,直到隊(duì)列有數(shù)據(jù)為止。如果timeout=正數(shù),則它最多超時(shí)正數(shù)秒。Empty隊(duì)列如果在該時(shí)間內(nèi)沒有數(shù)據(jù)可用,會引發(fā)異常。如果block=False,隊(duì)列有數(shù)據(jù),則會返回一個(gè)數(shù)據(jù)(超時(shí)被忽略),否則引發(fā)Empty異常。

get_nowait()

  • 等同于get(False)。

task_done()

  • 表示先前排隊(duì)的任務(wù)已完成。

join()

  • 阻塞直到隊(duì)列中的所有數(shù)據(jù)都已獲得處理。每當(dāng)將項(xiàng)目添加到隊(duì)列時(shí),未完成任務(wù)的數(shù)量就會增加。每當(dāng)使用者線程調(diào)用task_done()以指示已檢索到該項(xiàng)目并且該項(xiàng)目的所有工作完成時(shí),該計(jì)數(shù)就會減少。當(dāng)未完成的任務(wù)數(shù)降至零時(shí),join()取消阻止。

3.SimpleQueue對象

qsize()
empty()
put(item, block = True, timeout = None )
put_nowait(item)
get(block = True,timeout = None)
get_nowait(item)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python機(jī)器學(xué)習(xí)三大件之一numpy

    Python機(jī)器學(xué)習(xí)三大件之一numpy

    這篇文章主要介紹了Python機(jī)器學(xué)習(xí)三大件之一numpy,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好地幫助喲.需要的朋友可以參考下
    2021-05-05
  • python?如何使用requests下載文件

    python?如何使用requests下載文件

    這篇文章主要介紹了python?如何使用requests下載文件,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python算法應(yīng)用實(shí)戰(zhàn)之隊(duì)列詳解

    Python算法應(yīng)用實(shí)戰(zhàn)之隊(duì)列詳解

    隊(duì)列是一種先進(jìn)先出(First-In-First-Out,F(xiàn)IFO)的數(shù)據(jù)結(jié)構(gòu)。隊(duì)列被用在很多地方,比如提交操作系統(tǒng)執(zhí)行的一系列進(jìn)程、打印任務(wù)池等,一些仿真系統(tǒng)用隊(duì)列來模擬銀行或雜貨店里排隊(duì)的顧客。下面就介紹了Python中隊(duì)列的應(yīng)用實(shí)戰(zhàn),需要的可以參考。
    2017-02-02
  • 基于Python制作簡易的windows修改器

    基于Python制作簡易的windows修改器

    現(xiàn)在應(yīng)該大部分人都使用win11系統(tǒng)吧,win11其實(shí)挺好用哈,只是有一點(diǎn)不好用,就是右鍵的菜單,今天做個(gè)小程序,就是應(yīng)該修改win11的一個(gè)應(yīng)用程序,感興趣的可以了解一下
    2022-08-08
  • Python中schedule模塊定時(shí)任務(wù)的使用方法(2)

    Python中schedule模塊定時(shí)任務(wù)的使用方法(2)

    這篇文章主要介紹了Python中schedule模塊定時(shí)任務(wù)的使用方法,文章基于上一篇文章的內(nèi)容展開的后續(xù),需要的朋友可以參考一下
    2022-05-05
  • python遍歷文件夾下所有excel文件

    python遍歷文件夾下所有excel文件

    這篇文章主要介紹了python遍歷文件夾下所有excel文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python流行ORM框架sqlalchemy安裝與使用教程

    Python流行ORM框架sqlalchemy安裝與使用教程

    這篇文章主要介紹了Python流行ORM框架sqlalchemy安裝與使用,結(jié)合具體實(shí)例形式分析了sqlalchemy的安裝及ORM映射、查詢等相關(guān)操作技巧,需要的朋友可以參考下
    2019-06-06
  • 200個(gè)Python?標(biāo)準(zhǔn)庫總結(jié)

    200個(gè)Python?標(biāo)準(zhǔn)庫總結(jié)

    這篇文章主要給大家分享了200個(gè)Python?標(biāo)準(zhǔn)庫總結(jié),主要對文本、數(shù)據(jù)類型、數(shù)學(xué)等多個(gè)類型總結(jié),既有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-01-01
  • python 初始化一個(gè)定長的數(shù)組實(shí)例

    python 初始化一個(gè)定長的數(shù)組實(shí)例

    今天小編就為大家分享一篇python 初始化一個(gè)定長的數(shù)組實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • PyQt5的安裝配置過程,將ui文件轉(zhuǎn)為py文件后顯示窗口的實(shí)例

    PyQt5的安裝配置過程,將ui文件轉(zhuǎn)為py文件后顯示窗口的實(shí)例

    今天小編就為大家分享一篇PyQt5的安裝配置過程,將ui文件轉(zhuǎn)為py文件后顯示窗口的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06

最新評論