自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python數(shù)據(jù)結(jié)構(gòu)之隊(duì)列

開發(fā) 后端
python內(nèi)置的queue模塊實(shí)現(xiàn)了三種類型的隊(duì)列,因此沒有必要重復(fù)造輪子,它們的區(qū)別僅僅是條目取回的順序。

[[411623]]

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

  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)先級隊(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ù)就會增加。

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

當(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)先級隊(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.fullTrue 
  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é)果為:

 

責(zé)任編輯:武曉燕 來源: python與大數(shù)據(jù)分析
相關(guān)推薦

2009-08-11 14:43:42

C#數(shù)據(jù)結(jié)構(gòu)與算法

2021-07-15 06:43:12

Python數(shù)據(jù)結(jié)構(gòu)

2017-03-01 13:58:46

Python數(shù)據(jù)結(jié)構(gòu)鏈表

2021-07-13 07:52:03

Python數(shù)據(jù)結(jié)構(gòu)

2011-04-11 12:48:36

隊(duì)列數(shù)據(jù)結(jié)構(gòu)C++

2011-04-11 11:23:17

隊(duì)列數(shù)據(jù)結(jié)構(gòu)

2021-07-11 12:06:43

python數(shù)據(jù)結(jié)構(gòu)

2021-06-11 06:10:09

Python數(shù)據(jù)結(jié)構(gòu)算法

2022-09-01 16:27:19

JavaScriptWeb開發(fā)

2021-03-09 06:30:32

JAVA數(shù)據(jù)結(jié)構(gòu)算法

2021-03-29 08:01:20

JavaScript數(shù)據(jù)結(jié)構(gòu)

2023-03-28 07:44:23

數(shù)據(jù)結(jié)構(gòu)數(shù)組

2020-12-17 10:12:33

數(shù)據(jù)結(jié)構(gòu)算法隊(duì)列

2009-07-02 14:59:28

Java考研試題

2012-02-02 10:21:05

單鏈表nexthead

2023-09-26 12:22:37

隊(duì)列Python

2018-06-06 08:54:23

數(shù)據(jù)結(jié)構(gòu)存儲

2024-10-11 16:43:05

高并發(fā)數(shù)據(jù)結(jié)構(gòu)技巧

2023-09-21 16:13:20

Python數(shù)據(jù)結(jié)構(gòu)

2022-01-18 19:13:52

背包問題數(shù)據(jù)結(jié)構(gòu)算法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號