日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python3 queue队列类

發(fā)布時(shí)間:2023/12/14 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3 queue队列类 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

class?queue.PriorityQueue(maxsize=0)

優(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ì)列尺寸為無(wú)限大

最小值先被取出( 最小值條目是由?sorted(list(entries))[0]?返回的條目)。條目的典型模式是一個(gè)以下形式的元組:?(priority_number,?data)?。

如果?data?元素沒(méi)有可比性,數(shù)據(jù)將被包裝在一個(gè)類(lèi)中,忽略數(shù)據(jù)值,僅僅比較優(yōu)先級(jí)數(shù)字 :

1 from dataclasses import dataclass, field 2 from typing import Any 3 4 @dataclass(order=True) 5 class PrioritizedItem: 6 priority: int 7 item: Any=field(compare=False)

Queue對(duì)象

隊(duì)列對(duì)象 (Queue,?LifoQueue, 或者?PriorityQueue) 提供下列描述的公共方法。

Queue.qsize()

返回隊(duì)列的大致大小。注意,qsize() > 0 不保證后續(xù)的 get() 不被阻塞,qsize() < maxsize 也不保證 put() 不被阻塞。

Queue.empty()

如果隊(duì)列為空,返回?True?,否則返回?False?。如果 empty() 返回?True?,不保證后續(xù)調(diào)用的 put() 不被阻塞。類(lèi)似的,如果 empty() 返回?False?,也不保證后續(xù)調(diào)用的 get() 不被阻塞。

Queue.full()

如果隊(duì)列是滿的返回?True?,否則返回?False?。如果 full() 返回?True?不保證后續(xù)調(diào)用的 get() 不被阻塞。類(lèi)似的,如果 full() 返回?False?也不保證后續(xù)調(diào)用的 put() 不被阻塞。

Queue.put(item,?block=True,?timeout=None)

將?item?放入隊(duì)列。如果可選參數(shù)?block?是 true 并且?timeout?是?None?(默認(rèn)),則在必要時(shí)阻塞至有空閑插槽可用。如果?timeout?是個(gè)正數(shù),將最多阻塞?timeout?秒,如果在這段時(shí)間沒(méi)有可用的空閑插槽,將引發(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?將被忽略)。

POSIX系統(tǒng)3.0之前,以及所有版本的Windows系統(tǒng)中,如果?block?是 true 并且?timeout?是?None?, 這個(gè)操作將進(jìn)入基礎(chǔ)鎖的不間斷等待。這意味著,沒(méi)有異常能發(fā)生,尤其是 SIGINT 將不會(huì)觸發(fā)?KeyboardInterrupt?異常。

Queue.get_nowait()

相當(dāng)于?get(False)?。

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

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?異常 。

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()?阻塞被解除。

如何等待排隊(duì)的任務(wù)被完成的示例:

1 def worker(): 2 while True: 3 item = q.get() 4 if item is None: 5 break 6 do_work(item) 7 q.task_done() 8 9 q = queue.Queue() 10 threads = [] 11 for i in range(num_worker_threads): 12 t = threading.Thread(target=worker) 13 t.start() 14 threads.append(t) 15 16 for item in source(): 17 q.put(item) 18 19 # block until all tasks are done 20 q.join() 21 22 # stop workers 23 for i in range(num_worker_threads): 24 q.put(None) 25 for t in threads: 26 t.join()

?

一道leetcode題目:

347.?Top K Frequent Elements? ?前K個(gè)高頻元素

給定一個(gè)非空的整數(shù)數(shù)組,返回其中出現(xiàn)頻率前?k?高的元素。

示例 1:

輸入: nums = [1,1,1,2,2,3], k = 2 輸出: [1,2]

示例 2:

輸入: nums = [1], k = 1 輸出: [1]

說(shuō)明:

  • 你可以假設(shè)給定的?k?總是合理的,且 1 ≤ k ≤ 數(shù)組中不相同的元素的個(gè)數(shù)。
  • 你的算法的時(shí)間復(fù)雜度必須優(yōu)于 O(n?log?n) ,?n?是數(shù)組的大小。
1 class Solution: 2 def topKFrequent(self, nums, k: int): 3 if k<0 or k>len(nums): return [] 4 from queue import PriorityQueue 5 from collections import defaultdict 6 queue = PriorityQueue() 7 d = defaultdict(int) 8 res = [] 9 for i in nums: 10 d[i]+=1 11 d = list(d.items()) 12 print(d) 13 for i in range(len(d)): 14 queue.put([-d[i][1],d[i][0]]) 15 for i in range(k): 16 res.append(queue.get()[1]) 17 return res

?

參考自?Python 標(biāo)準(zhǔn)庫(kù)

轉(zhuǎn)載于:https://www.cnblogs.com/king-lps/p/10852670.html

總結(jié)

以上是生活随笔為你收集整理的Python3 queue队列类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。