Python數據結構之優先級隊列queue用法詳解
一、基本用法
Queue類實現瞭一個基本的先進先出容器。使用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,那麼數據結構中肯定也有後進先出的隊列。後進先出的隊列為:LifoQueue,示例如下:
import queue q = queue.LifoQueue() for i in range(1, 10): q.put(i) while not q.empty(): print(q.get(), end=" ")
運行之後,效果如下:
三、優先隊列
在操作系統中,我們常常會根據優先級來處理任務,比如系統的優先級最高,我們肯定優先處理系統任務,然後才處理用戶的任務。同樣,queue庫給我們提供瞭PriorityQueue來處理優先級的隊列。
示例如下:
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()
運行之後,效果如下:
這裡,我們默認數值越大優先級越高,可以看到15先執行,然後再是5,1任務。這個例子展現瞭有多個線程在處理任務時,要根據get()時隊列中元素的優先級來處理。
到此這篇關於Python數據結構之優先級隊列queue用法詳解的文章就介紹到這瞭,更多相關Python隊列queue 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!