1. 程式人生 > >python 數據結構 隊列(queue)

python 數據結構 隊列(queue)

會有 err tle 先進先出 none name 內容 alt aci

如需轉發,請註明出處:小婷兒的python https://www.cnblogs.com/xxtalhr/p/10293817.html

歡迎關註小婷兒的博客:

有問題請在博客下留言或加作者微信tinghai87605025 QQ 87605025

python QQ交流群:py_data 483766429

博客園:http://www.cnblogs.com/xxtalhr/

csdnhttps://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)