目錄
- 一、基本用法
- 二、LIFO隊列
- 三、優(yōu)先隊列
一、基本用法
Queue類實現(xiàn)了一個基本的先進先出容器。使用put()將元素增加到這個序列的一端,使用get()從另一端刪除。具體代碼如下所示:
import queue
q = queue.Queue()
for i in range(1, 10):
q.put(i)
while not q.empty():
print(q.get(), end=" ")
運行之后,效果如下:
這里我們依次添加1到10到隊列中,因為先進先出,所以出來的順序也與添加的順序相同。
二、LIFO隊列
既然有先進先出隊列queue,那么數(shù)據(jù)結(jié)構(gòu)中肯定也有后進先出的隊列。后進先出的隊列為:LifoQueue,示例如下:
import queue
q = queue.LifoQueue()
for i in range(1, 10):
q.put(i)
while not q.empty():
print(q.get(), end=" ")
運行之后,效果如下:
三、優(yōu)先隊列
在操作系統(tǒng)中,我們常常會根據(jù)優(yōu)先級來處理任務(wù),比如系統(tǒng)的優(yōu)先級最高,我們肯定優(yōu)先處理系統(tǒng)任務(wù),然后才處理用戶的任務(wù)。同樣,queue庫給我們提供了PriorityQueue來處理優(yōu)先級的隊列。
示例如下:
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()
運行之后,效果如下:
這里,我們默認數(shù)值越大優(yōu)先級越高,可以看到15先執(zhí)行,然后再是5,1任務(wù)。這個例子展現(xiàn)了有多個線程在處理任務(wù)時,要根據(jù)get()時隊列中元素的優(yōu)先級來處理。
到此這篇關(guān)于Python數(shù)據(jù)結(jié)構(gòu)之優(yōu)先級隊列queue用法詳解的文章就介紹到這了,更多相關(guān)Python隊列queue 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Python 數(shù)據(jù)結(jié)構(gòu)之樹的概念詳解
- python三種數(shù)據(jù)結(jié)構(gòu)及13種創(chuàng)建方法總結(jié)
- python數(shù)據(jù)結(jié)構(gòu)的排序算法
- Python內(nèi)置數(shù)據(jù)結(jié)構(gòu)列表與元組示例詳解
- Python二進制數(shù)據(jù)結(jié)構(gòu)Struct的具體使用
- python用sqlacodegen根據(jù)已有數(shù)據(jù)庫(表)結(jié)構(gòu)生成對應(yīng)SQLAlchemy模型
- Python數(shù)據(jù)結(jié)構(gòu)之圖的存儲結(jié)構(gòu)詳解
- Python數(shù)據(jù)結(jié)構(gòu)之二叉排序樹的定義、查找、插入、構(gòu)造、刪除
- 詳解python數(shù)據(jù)結(jié)構(gòu)之棧stack
- Python數(shù)據(jù)結(jié)構(gòu)詳細