python 數據結構 隊列(queue)
如需轉發,請註明出處:小婷兒的python https://www.cnblogs.com/xxtalhr/p/10293817.html
歡迎關註小婷兒的博客:
有問題請在博客下留言或加作者微信:tinghai87605025 或 QQ :87605025
python QQ交流群:py_data 483766429
博客園:http://www.cnblogs.com/xxtalhr/
csdn:https://blog.csdn.net/u010986753
一、概念
隊列(queue)是一種先進先出的(First In First Out)的線性表,簡稱FIFO。隊列允許在一端進行插入操作,而在另一端進行刪除操作。允許插入的一端為隊尾,允許刪除的一端為隊頭。隊列不允許在中間部位進行操作
二、作用
解耦:使程序直接實現松耦合,修改一個函數,不會有串聯關系。
提高處理效率:FIFO = 現進先出,LIFO = 後入先出。
註:隊列可以並發的派多個線程,對排列的線程處理,並切每個需要處理線程只需要將請求的數據放入隊列容器的內存中,線程不需要等待,當排列完畢處理完數據後,線程在準時來取數據即可。請求數據的線程只與這個隊列容器存在關系,處理數據的線程down掉不會影響到請求數據的線程,隊列會派給其他線程處理這分數據,它實現了解耦,提高效率。隊列內會有一個有順序的容器,列表與這個容器是有區別的,列表中數據雖然是排列的,但數據被取走後還會保留,而隊列中這個容器的數據被取後將不會保留。當必須在多個線程之間安全地交換信息時,隊列在線程編程中特別有用。
1 class Queue: 2 def queue(self): 3 ‘‘‘入隊‘‘‘ 4 def dequeue(self): 5 ‘‘‘出隊‘‘‘ 6 if __name__ == ‘__main__‘: 7 xxt = [1, 2, 3, 4] 8 #相當於在隊尾插入元素 9 xxt.insert(1, 10) 10 xxt.insert(0, 20)#0代表隊尾 11 print(‘insert:‘,xxt) 12 13 #相當於從隊首刪除元素 14 xxt.pop()15 print(‘pop:‘,xxt)
‘‘‘結果
insert: [20, 1, 10, 2, 3, 4]
pop: [20, 1, 10, 2, 3]
‘‘‘
三、隊列參數介紹
Queue.Queue(maxsize=0) FIFO, 如果maxsize小於1就表示隊列長度無限
Queue.LifoQueue(maxsize=0) LIFO, 如果maxsize小於1就表示隊列長度無限
Queue.qsize() 返回隊列的大小
Queue.empty() 如果隊列為空,返回True,反之False
Queue.full() 如果隊列滿了,返回True,反之False
Queue.get([block[, timeout]]) 讀隊列,取出數據 ,沒有數據將會等待timeout等待時間
Queue.put(item, [block[, timeout]]) 寫隊列,放入數據,timeout等待時間
Queue.queue.clear() 清空隊列
class queue.PriorityQueue(maxsize=0) 存儲數據時可設置優先級的隊列,優先級設置數越小等級越高
Queue.get(timeout = 1)如果1秒後沒取到數據就退出
Queue.get_nowait() 取數據,如果沒數據拋queue.Empty異常
Queue.task_done()後續調用告訴隊列,任務的處理是完整的。
1 from collections import deque 2 queue = deque(["Eric", "John", "Michael"]) 3 print(‘queue:‘,queue) 4 queue.append("Terry") 5 print(‘queue.append:‘,queue) 6 queue.append("Graham") 7 print(‘queue.append:‘,queue) 8 queue.popleft() 9 print(‘queue.popleft:‘,queue) 10 queue.popleft() 11 print(‘queue.popleft:‘,queue) 12 13 ‘‘‘結果 14 queue: deque([‘Eric‘, ‘John‘, ‘Michael‘]) 15 queue.append: deque([‘Eric‘, ‘John‘, ‘Michael‘, ‘Terry‘]) 16 queue.append: deque([‘Eric‘, ‘John‘, ‘Michael‘, ‘Terry‘, ‘Graham‘]) 17 queue.popleft: deque([‘John‘, ‘Michael‘, ‘Terry‘, ‘Graham‘]) 18 queue.popleft: deque([‘Michael‘, ‘Terry‘, ‘Graham‘]) 19 ‘‘‘
來源: https://www.cnblogs.com/xiangsikai/p/8185031.html
OCP培訓說明連接:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA
OCM培訓說明連接:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA
小婷兒的python正在成長中,其中還有很多不足之處,隨著學習和工作的深入,會對以往的博客內容逐步改進和完善噠。
重要的事多做幾遍。。。。。。
python 數據結構 隊列(queue)