日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python數(shù)據(jù)結(jié)構(gòu)之隊(duì)列

python內(nèi)置的queue模塊實(shí)現(xiàn)了三種類型的隊(duì)列,因此沒有必要重復(fù)造輪子,它們的區(qū)別僅僅是條目取回的順序。在 FIFO 隊(duì)列中,先添加的任務(wù)先取回。在 LIFO 隊(duì)列中,最近被添加的條目先取回(操作類似一個(gè)堆棧)。優(yōu)先級(jí)隊(duì)列中,條目將保持排序( 使用 heapq 模塊 ) 并且最小值的條目第一個(gè)返回。

創(chuàng)新互聯(lián)專注于墾利網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供墾利營銷型網(wǎng)站建設(shè),墾利網(wǎng)站制作、墾利網(wǎng)頁設(shè)計(jì)、墾利網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造墾利網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供墾利網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

 
 
 
 
  1. class queue.Queue(maxsize=0) 

FIFO 先入先出隊(duì)列構(gòu)造函數(shù)。maxsize 是個(gè)整數(shù),用于設(shè)置可以放入隊(duì)列中的項(xiàng)目數(shù)的上限。當(dāng)達(dá)到這個(gè)大小的時(shí)候,插入操作將阻塞至隊(duì)列中的項(xiàng)目被消費(fèi)掉。如果 maxsize 小于等于零,隊(duì)列尺寸為無限大。

 
 
 
 
  1. maxsize is an integer that sets the upperbound limit on the number of items that can be placed in the queue.  
  2. class queue.LifoQueue(maxsize=0) 

LIFO 后入先出隊(duì)列構(gòu)造函數(shù)。maxsize 是個(gè)整數(shù),用于設(shè)置可以放入隊(duì)列中的項(xiàng)目數(shù)的上限。當(dāng)達(dá)到這個(gè)大小的時(shí)候,插入操作將阻塞至隊(duì)列中的項(xiàng)目被消費(fèi)掉。如果 maxsize 小于等于零,隊(duì)列尺寸為無限大。

 
 
 
 
  1. class queue.PriorityQueue(maxsize=0) 

PriorityQueue優(yōu)先級(jí)隊(duì)列構(gòu)造函數(shù)。maxsize 是個(gè)整數(shù),用于設(shè)置可以放入隊(duì)列中的項(xiàng)目數(shù)的上限。當(dāng)達(dá)到這個(gè)大小的時(shí)候,插入操作將阻塞至隊(duì)列中的項(xiàng)目被消費(fèi)掉。如果 maxsize 小于等于零,隊(duì)列尺寸為無限大。

通用方法:

Queue.qsize() 返回隊(duì)列的大致大小

Queue.empty() 如果隊(duì)列為空,返回 True ,否則返回 False 。

Queue.full() 如果隊(duì)列是滿的返回 True ,否則返回 False 。

Queue.put(item, block=True, timeout=None) 將 item 放入隊(duì)列。

如果可選參數(shù) block 是 true 并且 timeout 是 None (默認(rèn)),則在必要時(shí)阻塞至有空閑插槽可用。

如果 timeout 是個(gè)正數(shù),將最多阻塞 timeout 秒,如果在這段時(shí)間沒有可用的空閑插槽,將引發(fā) Full 異常。

反之 (block 是 false),如果空閑插槽立即可用,則把 item 放入隊(duì)列,否則引發(fā) Full 異常 ( 在這種情況下,timeout 將被忽略)。

Queue.put_nowait(item) 相當(dāng)于 put(item, False) 。

Queue.get(block=True, timeout=None) 從隊(duì)列中移除并返回一個(gè)項(xiàng)目。

如果可選參數(shù) block 是 true 并且 timeout 是 None (默認(rèn)值),則在必要時(shí)阻塞至項(xiàng)目可得到。

如果 timeout 是個(gè)正數(shù),將最多阻塞 timeout 秒,如果在這段時(shí)間內(nèi)項(xiàng)目不能得到,將引發(fā) Empty 異常。

反之 (block 是 false) , 如果一個(gè)項(xiàng)目立即可得到,則返回一個(gè)項(xiàng)目,否則引發(fā) Empty 異常 (這種情況下,timeout 將被忽略)。

Queue.get_nowait() 相當(dāng)于 get(False) 。

提供了兩個(gè)方法,用于支持跟蹤 排隊(duì)的任務(wù) 是否 被守護(hù)的消費(fèi)者線程 完整的處理。

 
 
 
 
  1. Queue.task_done() 

表示前面排隊(duì)的任務(wù)已經(jīng)被完成。被隊(duì)列的消費(fèi)者線程使用。每個(gè) get() 被用于獲取一個(gè)任務(wù), 后續(xù)調(diào)用 task_done() 告訴隊(duì)列,該任務(wù)的處理已經(jīng)完成。

如果 join() 當(dāng)前正在阻塞,在所有條目都被處理后,將解除阻塞(意味著每個(gè) put() 進(jìn)隊(duì)列的條目的 task_done() 都被收到)。

如果被調(diào)用的次數(shù)多于放入隊(duì)列中的項(xiàng)目數(shù)量,將引發(fā) ValueError 異常 。

 
 
 
 
  1. Queue.join() 

阻塞至隊(duì)列中所有的元素都被接收和處理完畢。

當(dāng)條目添加到隊(duì)列的時(shí)候,未完成任務(wù)的計(jì)數(shù)就會(huì)增加。

每當(dāng)消費(fèi)者線程調(diào)用 task_done() 表示這個(gè)條目已經(jīng)被回收,該條目所有工作已經(jīng)完成,未完成計(jì)數(shù)就會(huì)減少。

當(dāng)未完成計(jì)數(shù)降到零的時(shí)候, join() 阻塞被解除。

代碼如下:

 
 
 
 
  1. #!/usr/bin/env python 
  2. # -*- coding: UTF-8 -*- 
  3. #                     _ooOoo_ 
  4. #                   o8888888o 
  5. #                    88" . "88 
  6. #                 ( | -  _  - | ) 
  7. #                     O\ = /O 
  8. #                 ____/`---'\____ 
  9. #                  .' \\| |// `. 
  10. #                 / \\|||:|||// \ 
  11. #               / _|||||-:- |||||- \ 
  12. #                | | \\\ - /// | | 
  13. #              | \_| ''\---/'' | _/ | 
  14. #               \ .-\__ `-` ___/-. / 
  15. #            ___`. .' /--.--\ `. . __ 
  16. #         ."" '< `.___\_<|>_/___.' >'"". 
  17. #       | | : `- \`.;`\  _ /`;.`/ - ` : | | 
  18. #          \ \ `-. \_ __\ /__ _/ .-` / / 
  19. #      ==`-.____`-.___\_____/___.-`____.-'== 
  20. #                     `=---=' 
  21. ''' 
  22. @Project :pythonalgorithms  
  23. @File :queuedatastructure.py 
  24. @Author :不勝人生一場醉 
  25. @Date :2021/7/15 1:53  
  26. ''' 
  27. from queue import Queue, LifoQueue, PriorityQueue, SimpleQueue 
  28. import random 
  29.  
  30. if __name__ == '__main__': 
  31.     q = Queue()  # 先進(jìn)先出隊(duì)列 
  32.     lq = LifoQueue()  # 先進(jìn)后廚隊(duì)列 
  33.     pq = PriorityQueue()  # 優(yōu)先級(jí)隊(duì)列 
  34.     sq = SimpleQueue()  # 簡單隊(duì)列 
  35.     # 插入隊(duì)列數(shù)據(jù) 
  36.     for i in range(10): 
  37.         q.put(i) 
  38.         lq.put(i) 
  39.         pq.put(random.randint(1, 20), i) 
  40.         sq.put(i) 
  41.     for i in range(10): 
  42.         print(q.get(), end=' ') 
  43.     # 0 1 2 3 4 5 6 7 8 9  
  44.     print('\r') 
  45.     for i in range(10): 
  46.         print(lq.get(), end=' ') 
  47.     # 9 8 7 6 5 4 3 2 1 0  
  48.     print('\r') 
  49.     for i in range(10): 
  50.         print(pq.get(), end=' ') 
  51.     # 6 7 13 16 17 18 18 19 20 20  
  52.     print('\r') 
  53.     for i in range(10): 
  54.         print(sq.get(), end=' ') 
  55.     # 0 1 2 3 4 5 6 7 8 9  
  56.  
  57.     q = Queue(3) 
  58.     print('\r') 
  59.     print('queue.qsize=', q.qsize()) 
  60.     # queue.qsize= 0 
  61.     print('queue.empty=', q.empty()) 
  62.     # queue.empty= True 
  63.     q.put(5) 
  64.     q.put(9) 
  65.     q.put(1) 
  66.     print('queue.full=', q.full()) 
  67.     # queue.full= True 
  68.     # q.put(10) 
  69.     # print(q) 
  70.     # q.put(11,block=True,timeout=1)  #在timeout=1秒左右,返回 raise Full 
  71.     # print(q) 
  72.     # q.put(11, block=False, timeout=1)  # 立刻 返回 raise Full,忽略時(shí)間 
  73.     # print(q) 

輸出結(jié)果為:


分享名稱:Python數(shù)據(jù)結(jié)構(gòu)之隊(duì)列
分享路徑:http://www.dlmjj.cn/article/dhjspog.html