簡述
隊列一直都是工程化開發中經常使用的數據類型,本篇文章主要介紹一下python queue的使用,會邊調試代碼,邊說明方法內容。
環境
python: 3.6.13
單向隊列
初始化單向隊列
放置一些數據
可以使用full()方法判斷隊列是否已經塞滿數據,可以通過qsize()方法查看隊列內元素數量。
這時候我們從隊列取出數據,看先取到的是什么。
現在隊列里面只有兩個數,我們再塞入3個數看一下。
這個時候我們繼續塞入第六個數會怎么樣呢?
可以看到如果塞入超過隊列限定數量的元素,會阻塞住隊列。所以在一般的項目工程中,我們會分成兩個線程,一個消費數據,一個塞入隊列數據。按照業務需求看是否需要限定隊列長度。
先進后出隊列
上面展示的是先進先出(FIFO)的單項隊列,python的queue模塊也提供先進后出(LIFO)的隊列: LifoQueue,類似java的棧類型。
塞入數據后看取出的是在隊列的什么位置。
可以看出從隊列取出的是隊尾數據。
優先級隊列
按照自定的優先級來對隊列數據自動排序:PriorityQueue。
塞入數據后,全部取出,打印看一下順序是什么樣的。
可以看出,書序是按照我們塞入數據的級別由小到大排序的。
雙向隊列
雙向隊列,顧名思義就是可以從隊列兩端進行處理:deque。
初始化,并塞入3個數據。
從左側,也就是最前端塞入一個元素。看下效果。
可以自定義塞入元素的位置。
取出隊尾的數據。
取出隊首元素。
完整代碼
import queue # 單向隊列 q = queue.Queue(5) print(q.maxsize) q.put(1) q.put(2) q.put(3) print(q.full()) print(q.qsize()) print(q.get()) q.put(4) q.put(5) q.put(6) q.put(7) print(q.full()) print(q.qsize()) print(q.get()) # 先進后出隊列 q = queue.LifoQueue(5) q.put(1) q.put(2) q.put(3) print(q.get()) # 優先級隊列 q = queue.PriorityQueue(5) q.put((5, "電")) q.put((2, "雨")) q.put((4, "雷")) q.put((1, "風")) while True: print(q.get()) # 雙向隊列 q = queue.deque() q.append(1) q.append(2) q.append(3) q.appendleft(4) q.insert(2, 5) print(q.pop()) print(q.popleft())
總結
在很多工程化架構中,隊列數據類型是必不可少的。活學活用吧。哎,今年ti10,中國隊又無緣冠軍,明年加油吧。
如果本文對你有幫助,請點個贊支持一下吧。
到此這篇關于python 工具類之Queue組件詳解用法的文章就介紹到這了,更多相關python Queue組件內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://huyi-aliang.blog.csdn.net/article/details/120827420