class queue.PriorityQueue(maxsize=0)

优先级队列构造函数。 maxsize 是个整数,用于设置可以放入队列中的项目数的上限。当达到这个大小的时候,插入操作将阻塞至队列中的项目被消费掉。如果 maxsize 小于等于零,队列尺寸为无限大

最小值先被取出( 最小值条目是由 sorted(list(entries))[0] 返回的条目)。条目的典型模式是一个以下形式的元组: (priority_number, data) 。

如果 data 元素没有可比性,数据将被包装在一个类中,忽略数据值,仅仅比较优先级数字 :

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对象

队列对象 (QueueLifoQueue, 或者 PriorityQueue) 提供下列描述的公共方法。

Queue.qsize()

返回队列的大致大小。注意,qsize() > 0 不保证后续的 get() 不被阻塞,qsize() < maxsize 也不保证 put() 不被阻塞。

Queue.empty()

如果队列为空,返回 True ,否则返回 False 。如果 empty() 返回 True ,不保证后续调用的 put() 不被阻塞。类似的,如果 empty() 返回 False ,也不保证后续调用的 get() 不被阻塞。

Queue.full()

如果队列是满的返回 True ,否则返回 False 。如果 full() 返回 True 不保证后续调用的 get() 不被阻塞。类似的,如果 full() 返回 False 也不保证后续调用的 put() 不被阻塞。

Queue.put(itemblock=Truetimeout=None)

将 item 放入队列。如果可选参数 block 是 true 并且 timeout 是 None (默认),则在必要时阻塞至有空闲插槽可用。如果 timeout 是个正数,将最多阻塞 timeout 秒,如果在这段时间没有可用的空闲插槽,将引发 Full 异常。反之 (block 是 false),如果空闲插槽立即可用,则把 item 放入队列,否则引发 Full 异常 ( 在这种情况下,timeout 将被忽略)。

Queue.put_nowait(item)

相当于 put(item, False) 。

Queue.get(block=Truetimeout=None)

从队列中移除并返回一个项目。如果可选参数 block 是 true 并且 timeout 是 None (默认值),则在必要时阻塞至项目可得到。如果 timeout 是个正数,将最多阻塞 timeout 秒,如果在这段时间内项目不能得到,将引发 Empty 异常。反之 (block 是 false) , 如果一个项目立即可得到,则返回一个项目,否则引发 Empty 异常 (这种情况下,timeout 将被忽略)。

POSIX系统3.0之前,以及所有版本的Windows系统中,如果 block 是 true 并且 timeout 是 None , 这个操作将进入基础锁的不间断等待。这意味着,没有异常能发生,尤其是 SIGINT 将不会触发 KeyboardInterrupt 异常。

Queue.get_nowait()

相当于 get(False) 。

提供了两个方法,用于支持跟踪 排队的任务 是否 被守护的消费者线程 完整的处理。

Queue.task_done()

表示前面排队的任务已经被完成。被队列的消费者线程使用。每个 get() 被用于获取一个任务, 后续调用 task_done() 告诉队列,该任务的处理已经完成。

如果 join() 当前正在阻塞,在所有条目都被处理后,将解除阻塞(意味着每个 put() 进队列的条目的 task_done() 都被收到)。

如果被调用的次数多于放入队列中的项目数量,将引发 ValueError 异常 。

Queue.join()

阻塞至队列中所有的元素都被接收和处理完毕。

当条目添加到队列的时候,未完成任务的计数就会增加。每当消费者线程调用 task_done() 表示这个条目已经被回收,该条目所有工作已经完成,未完成计数就会减少。当未完成计数降到零的时候, join() 阻塞被解除。

如何等待排队的任务被完成的示例:

 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个高频元素

给定一个非空的整数数组,返回其中出现频率前 高的元素。

示例 1:

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

示例 2:

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

说明:

  • 你可以假设给定的 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
  • 你的算法的时间复杂度必须优于 O(n log n) , 是数组的大小。
 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 标准库

转载于:https://www.cnblogs.com/king-lps/p/10852670.html

Python3 queue队列类相关推荐

  1. Python3 queue队列模块详解

    queue介绍 queue是python中的标准库,俗称队列. 在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换 ...

  2. java集合类——Stack栈类与Queue队列

    今日走读代码时,遇到stack栈类,特查看java的API文档,总结如下: Stack继承Vector类,它通过五个操作对类 Vector 进行了扩展. 栈是 后进先出的. 栈提供了通常的 push ...

  3. Java黑皮书课后题第10章:*10.10(Queue类)10.6节给出一个Stock类。设计一个名为Queue的类用于存储整数。像栈一样,队列保存元素。在栈中,元素后进先出。队列中元素先进先出

    10.10(Queue类)10.6节给出一个Stock类,设计一个名为Queue的类用于存储整数 题目 程序 破题 代码 Test10.java Test10_Queue.java UML 题目 程序 ...

  4. java emptyqueueexception,阅读以下说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。说明 类Queue表示队列,类中的 - 赏学吧...

    阅读以下说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内. 说明 类Queue表示队列,类中的方法如下表所示. 类Node表示队列中的元素:类EmptyQueueException 给出 ...

  5. python线性表和队列_[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列...

    python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构 ...

  6. 【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )

    文章目录 queue 队列 stack 栈 priority_queue 优先级队列 priority_queue 优先级队列指定排序方法 priority_queue 优先级队列排序行为 prior ...

  7. 实现一个队列类,该类用两个栈来实现

    1 /* 2 * 实现一个队列类,该类用两个栈来实现 3 * 队列和栈的主要区别是,队列是先进先出,就像我们在食堂[派对打饭一样,先到先打 4 * 栈是先进后出,就像枪里面的子弹,最先进去的把压到了最 ...

  8. 在laravel5 中使用queue队列

    如何在laravel5 中使用queue队列 Laravel Queue是延迟处理应用程序中耗时任务的有效方法.此类任务的示例可能包括每当新用户在您的应用程序中注册或通过社交媒体分享帖子时发送验证电子 ...

  9. java中的Queue队列的用法

    大家好,欢迎来到雄雄的小课堂,今天给大家分享的是"java中的Queue队列的用法" 前言:好多人对Queue不是很熟悉,毕竟平时也不怎么用,遇到集合要么List要么map这些常用 ...

最新文章

  1. 详解 | SLAM回环检测问题
  2. 电脑怎样限制装软件 怎么限制软件运行
  3. GGGit与Github
  4. 多层mvc,thikphp进阶
  5. 改变UITableView的headerView、footerView背景颜色
  6. Pycharm debug出现Qt 错误 Process finished with exit code -1073741819 (0xC0000005)
  7. tp5 if 如果有html判断,tp5条件判断,in,notin,between,if等
  8. w3c dom操作Xml时从加入另一个XML文件的一个元素
  9. 学计算机编程200字感想,计算机学习心得体会
  10. 【POJ 1151】Atlantis
  11. 【数据结构】4.1图的创建及DFS深度遍历(不完善)
  12. 《『若水新闻』客户端开发教程》——16.添加广告
  13. 如何系统的自学python-如何系统地自学 Python?
  14. 计算机二级第24套Excel解析,Excel | 操作题第 24 套
  15. sql语句优化的几种方法
  16. DolphinScheduler 调度系统
  17. c# 非阻塞算法_c# – 了解非阻塞线程同步和Thread.MemoryBarrier
  18. 前端程序员的焦虑感从何而来?web前端发展如何
  19. postgresql设置开机自启动
  20. 【转】SD Card - UHS-I UHS Speed Class 1

热门文章

  1. SitePoint播客#38:猫的大脑
  2. 6阶群的非平凡子群_当|G|=8时,群lt;G,*gt;只能有?阶非平凡子群,不能有?阶子群,平凡子群为?...
  3. hdu1114 Piggy-Bank
  4. 使用mprotect定位踩内存故障
  5. PCB板抄板的流程_PCB板抄板的技巧
  6. 浏览器提示ssl证书过期怎么办
  7. [Python3] Python中单下划线和双下划线的含义
  8. fiilt1左耳无法同步_FIIL T1 X真无线运动耳机体验:闪连快充秒同步 媲美AirPods
  9. 数据标注去哪接任务订单?靠谱的数据标注平台有哪些?
  10. 无线网能连接上但无法连接服务器是啥原因,腾达无线路由器能连接但是上不了网怎么办...