成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python數據結構之隊列

開發 后端
python內置的queue模塊實現了三種類型的隊列,因此沒有必要重復造輪子,它們的區別僅僅是條目取回的順序。

[[411623]]

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

  1. class queue.Queue(maxsize=0) 

FIFO 先入先出隊列構造函數。maxsize 是個整數,用于設置可以放入隊列中的項目數的上限。當達到這個大小的時候,插入操作將阻塞至隊列中的項目被消費掉。如果 maxsize 小于等于零,隊列尺寸為無限大。

  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 后入先出隊列構造函數。maxsize 是個整數,用于設置可以放入隊列中的項目數的上限。當達到這個大小的時候,插入操作將阻塞至隊列中的項目被消費掉。如果 maxsize 小于等于零,隊列尺寸為無限大。

  1. class queue.PriorityQueue(maxsize=0) 

PriorityQueue優先級隊列構造函數。maxsize 是個整數,用于設置可以放入隊列中的項目數的上限。當達到這個大小的時候,插入操作將阻塞至隊列中的項目被消費掉。如果 maxsize 小于等于零,隊列尺寸為無限大。

通用方法:

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

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

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

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

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

如果 timeout 是個正數,將最多阻塞 timeout 秒,如果在這段時間沒有可用的空閑插槽,將引發 Full 異常。

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

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

Queue.get(block=True, timeout=None) 從隊列中移除并返回一個項目。

如果可選參數 block 是 true 并且 timeout 是 None (默認值),則在必要時阻塞至項目可得到。

如果 timeout 是個正數,將最多阻塞 timeout 秒,如果在這段時間內項目不能得到,將引發 Empty 異常。

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

Queue.get_nowait() 相當于 get(False) 。

提供了兩個方法,用于支持跟蹤 排隊的任務 是否 被守護的消費者線程 完整的處理。

  1. Queue.task_done() 

表示前面排隊的任務已經被完成。被隊列的消費者線程使用。每個 get() 被用于獲取一個任務, 后續調用 task_done() 告訴隊列,該任務的處理已經完成。

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

如果被調用的次數多于放入隊列中的項目數量,將引發 ValueError 異常 。

  1. Queue.join() 

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

當條目添加到隊列的時候,未完成任務的計數就會增加。

每當消費者線程調用 task_done() 表示這個條目已經被回收,該條目所有工作已經完成,未完成計數就會減少。

當未完成計數降到零的時候, 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()  # 先進先出隊列 
  32.     lq = LifoQueue()  # 先進后廚隊列 
  33.     pq = PriorityQueue()  # 優先級隊列 
  34.     sq = SimpleQueue()  # 簡單隊列 
  35.     # 插入隊列數據 
  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,忽略時間 
  73.     # print(q) 

輸出結果為:

 

責任編輯:武曉燕 來源: python與大數據分析
相關推薦

2009-08-11 14:43:42

C#數據結構與算法

2021-07-13 07:52:03

Python數據結構

2021-07-15 06:43:12

Python數據結構

2017-03-01 13:58:46

Python數據結構鏈表

2011-04-11 11:23:17

隊列數據結構

2011-04-11 12:48:36

隊列數據結構C++

2021-07-11 12:06:43

python數據結構

2021-06-11 06:10:09

Python數據結構算法

2021-03-09 06:30:32

JAVA數據結構算法

2022-09-01 16:27:19

JavaScriptWeb開發

2021-03-29 08:01:20

JavaScript數據結構

2023-03-28 07:44:23

數據結構數組

2020-12-17 10:12:33

數據結構算法隊列

2012-02-02 10:21:05

單鏈表nexthead

2009-07-02 14:59:28

Java考研試題

2018-06-06 08:54:23

數據結構存儲

2023-09-26 12:22:37

隊列Python

2024-10-11 16:43:05

高并發數據結構技巧

2022-01-18 19:13:52

背包問題數據結構算法

2023-10-31 08:51:25

數據結構存儲數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲视频中文字幕 | 欧美日韩一二三区 | 99久久电影 | 欧美一区二区小视频 | 国产亚洲精品久久久久久牛牛 | 国产精品日日夜夜 | 日本久久精品 | 欧美黑人一区 | 91免费小视频 | 日韩电影在线一区 | 亚洲欧美一区二区在线观看 | 一区在线视频 | 欧美日韩亚洲视频 | 久久国产一区二区三区 | 极品一区 | 欧美综合久久 | 综合一区二区三区 | 国产精品久久久久久久久久久久久久 | 精品1区2区3区4区 | 国产成人精品一区二区三 | 国产精品视频在线观看 | 色精品 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 欧美一区二区三区国产 | 日韩电影一区 | 精品欧美乱码久久久久久1区2区 | 国产一区二区在线观看视频 | 久在草 | 欧美不卡| 欧美一级片在线看 | 中文字幕视频在线观看 | 国产一区二区三区欧美 | 国产情侣久久 | 在线观看中文字幕亚洲 | 久久久精彩视频 | 视频在线观看一区 | 美女黄网 | 国产一区91精品张津瑜 | 在线超碰 | 国产在线网址 | 一区在线观看视频 |