Python數(shù)據(jù)結(jié)構(gòu)之優(yōu)先級隊列queue用法詳解
一、基本用法
Queue類實現(xiàn)了一個基本的先進(jì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到隊列中,因為先進(jìn)先出,所以出來的順序也與添加的順序相同。
二、LIFO隊列
既然有先進(jìn)先出隊列queue,那么數(shù)據(jù)結(jié)構(gòu)中肯定也有后進(jìn)先出的隊列。后進(jìn)先出的隊列為: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()
運行之后,效果如下:
這里,我們默認(rèn)數(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)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。