python 數據結構 隊列(queue)


如需轉發,請注明出處:小婷兒的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掉不會影響到請求數據的線程,隊列會派給其他線程處理這分數據,它實現了解耦,提高效率。隊列內會有一個有順序的容器,列表與這個容器是有區別的,列表中數據雖然是排列的,但數據被取走后還會保留,而隊列中這個容器的數據被取后將不會保留。當必須在多個線程之間安全地交換信息時,隊列在線程編程中特別有用。

 

 

wpsC130.tmp 

 

 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正在成長中,其中還有很多不足之處,隨着學習和工作的深入,會對以往的博客內容逐步改進和完善噠。

重要的事多做幾遍。。。。。。

wpsFCFA.tmp


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM