Python數(shù)據(jù)結(jié)構(gòu)之優(yōu)先級(jí)隊(duì)列queue用法詳解
一、基本用法
Queue類實(shí)現(xiàn)了一個(gè)基本的先進(jìn)先出容器。使用put()將元素增加到這個(gè)序列的一端,使用get()從另一端刪除。具體代碼如下所示:
import queue
q = queue.Queue()
for i in range(1, 10):
q.put(i)
while not q.empty():
print(q.get(), end=" ")
運(yùn)行之后,效果如下:

這里我們依次添加1到10到隊(duì)列中,因?yàn)橄冗M(jìn)先出,所以出來(lái)的順序也與添加的順序相同。
二、LIFO隊(duì)列
既然有先進(jìn)先出隊(duì)列queue,那么數(shù)據(jù)結(jié)構(gòu)中肯定也有后進(jìn)先出的隊(duì)列。后進(jìn)先出的隊(duì)列為:LifoQueue,示例如下:
import queue
q = queue.LifoQueue()
for i in range(1, 10):
q.put(i)
while not q.empty():
print(q.get(), end=" ")
運(yùn)行之后,效果如下:

三、優(yōu)先隊(duì)列
在操作系統(tǒng)中,我們常常會(huì)根據(jù)優(yōu)先級(jí)來(lái)處理任務(wù),比如系統(tǒng)的優(yōu)先級(jí)最高,我們肯定優(yōu)先處理系統(tǒng)任務(wù),然后才處理用戶的任務(wù)。同樣,queue庫(kù)給我們提供了PriorityQueue來(lái)處理優(yōu)先級(jí)的隊(duì)列。
示例如下:
import queue
import threading
class Job:
def __init__(self, priority, desc):
self.priority = priority
self.desc = desc
print("New Job:", desc)
return
def __eq__(self, other):
try:
return self.priority == other.priority
except AttributeError:
return NotImplemented
def __lt__(self, other):
try:
return self.priority > other.priority
except AttributeError:
return NotImplemented
def process_Job(q):
while True:
next_job = q.get()
print(next_job.desc)
q.task_done()
q = queue.PriorityQueue()
q.put(Job(5, "Five Job"))
q.put(Job(15, "Fifteen Job"))
q.put(Job(1, "One Job"))
workers = [
threading.Thread(target=process_Job, args=(q,)),
threading.Thread(target=process_Job, args=(q,)),
]
for work in workers:
work.setDaemon(True)
work.start()
q.join()
運(yùn)行之后,效果如下:

這里,我們默認(rèn)數(shù)值越大優(yōu)先級(jí)越高,可以看到15先執(zhí)行,然后再是5,1任務(wù)。這個(gè)例子展現(xiàn)了有多個(gè)線程在處理任務(wù)時(shí),要根據(jù)get()時(shí)隊(duì)列中元素的優(yōu)先級(jí)來(lái)處理。
到此這篇關(guān)于Python數(shù)據(jù)結(jié)構(gòu)之優(yōu)先級(jí)隊(duì)列queue用法詳解的文章就介紹到這了,更多相關(guān)Python隊(duì)列queue 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)PDF中表格轉(zhuǎn)化為Excel的方法
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)PDF中表格轉(zhuǎn)化為Excel的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
使用Python實(shí)現(xiàn)圖像標(biāo)記點(diǎn)的坐標(biāo)輸出功能
這篇文章主要介紹了使用Python實(shí)現(xiàn)圖像標(biāo)記點(diǎn)的坐標(biāo)輸出功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-08-08
python數(shù)據(jù)結(jié)構(gòu)樹(shù)和二叉樹(shù)簡(jiǎn)介
這篇文章主要介紹了python數(shù)據(jù)結(jié)構(gòu)樹(shù)和二叉樹(shù)簡(jiǎn)介,需要的朋友可以參考下2014-04-04
Python3 獲取一大段文本之間兩個(gè)關(guān)鍵字之間的內(nèi)容方法
今天小編就為大家分享一篇Python3 獲取一大段文本之間兩個(gè)關(guān)鍵字之間的內(nèi)容方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
Python實(shí)現(xiàn)輕松找出文本文件中的高頻單詞
當(dāng)想要深入了解一段文本,最常見(jiàn)的需求之一就是找到其中出現(xiàn)頻率最高的單詞,下面小編就來(lái)為大家詳細(xì)介紹一下如何使用Python實(shí)現(xiàn)輕松找出文本文件中的高頻單詞,需要的可以參考下2023-11-11
Python 的 __str__ 和 __repr__ 方法對(duì)比
這篇文章主要介紹了Python 的 __str__ 和 __repr__ 方法的相關(guān)資料,幫助大家區(qū)分__str__ 和 __repr__ ,感興趣的朋友可以了解下2020-09-09
Python利用PyPDF2庫(kù)實(shí)現(xiàn)輕松提取PDF文本
ython中的PyPDF2庫(kù)是一個(gè)非常有用的工具,無(wú)論您是需要分析PDF文檔中的內(nèi)容還是需要在文檔中搜索特定的信息,PyPDF2都可以幫助您輕松實(shí)現(xiàn)這些任務(wù),下面我們就來(lái)學(xué)習(xí)一下如何利用PyPDF2提取PDF文本吧2023-09-09

