15.队列Queue的特点以及使用,优先级等
#生产者与消费者模式,模式解释:比如MVC设计模式
'''
1.队列
(1)特点:先进先出
(2)python2 VS python3
python2:from Queue import queue
python3:from queue import Queue join--阻塞动作
blocked--状态 (3)使用
Python的Queue模块中提供了同步的,线程安全的队列类
a.FIFO----(First In First Out)先进先出
b.LIFO----(Last In First Out)后进先出
中间的时候,给自己贴一个标签,给自己设置一个优先级
c.priority----优先级队列 这些队列都实现了锁原语(可以理解为原子操作,即要么不做,要么做完),能够在多线程中直接使用
可以使用队列来实现线程间的同步问题
'''
from queue import Queue
#可以生成优先级队列
import queue
#这样不安全 可能会对其进行更改
# download__list = [11,22,33] q = Queue(3) #默认先进先出队列
#判断队列是否为空
# print(q.empty()) #往队列中放数据
q.put('d1')
q.put('d2')
q.put('d3')
# print(q.qsize())
#判断是否空和满
# print(q.empty(),q.full()) #取数据
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get(timeout=2))#阻塞,超时之后抛出queue.Empty异常,没有数据强制取
# print(q.get_nowait())#不要等待,没有数据抛出queue.Empty异常 #b.规定队列长度
# q1 = Queue(maxsize=4)#最大任务数为4
# q1.put(1)
# q1.put(2)
# q1.put(3)
# q1.put(4)
# q1.put(5)
# q1.put(5,timeout=2)#阻塞,如果队列已满,抛queue.Full异常
# q1.put(5,block=False)#抛queue.Full异常 # print(q1.qsize())#获取队列当中的任务数量大小
# print('~~~~~~~~~~~~~') #c.队列优先级,数字小的优先级高
q2 = queue.PriorityQueue()
q2.put((1,'d1'))
q2.put((2,'d2'))
q2.put((-1,'d3'))
q2.put((0,'d4'))
# print(q2.get())
# print(q2.get())
# print(q2.get())
# print(q2.get()) #取里面的数据
# i = 0
# while i < q2.qsize():
# print(q2.get()) #后进先出队列
q3 = queue.LifoQueue()
q3.put(1)
q3.put(2)
q3.put(3) i = 0
while i < q3.qsize():
print(q3.get())
15.队列Queue的特点以及使用,优先级等的更多相关文章
- 队列Queue、栈LifoQueue、优先级队列PriorityQueue
队列:队列是先进先出. import queue q = queue.Queue() q.put(1) q.put(2) q.put(3) q.put(4) print(q.get()) print( ...
- Java中的队列Queue,优先级队列PriorityQueue
队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...
- 映射Map、队列Queue、优先级队列PriorityQueue
映射Map 将对象映射到其他对象的能力是解决编程问题的有效方法.例如,考虑一个程序,它被用来检查 Java 的 Random 类的随机性.理想情况下, Random 会产生完美的数字分布,但为了测试这 ...
- STL学习笔记6 -- 栈stack 、队列queue 和优先级priority_queue 三者比较
栈stack .队列queue 和优先级priority_queue 三者比较 默认下stack 和queue 基于deque 容器实现,priority_queue 则基于vector 容器实现 ...
- python笔记9 线程进程 threading多线程模块 GIL锁 multiprocessing多进程模块 同步锁Lock 队列queue IO模型
线程与进程 进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及如何完成:数据集则是程序在执行过程中所需要 ...
- [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)
再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...
- Python进阶【第二篇】多线程、消息队列queue
1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...
- java09 队列Queue与Deque
队列Queue与Deque. Enumeration Hashtable与Hashtable子类Properties(资源配置文件) 引用类型(强.软.弱.虚)与WeakHashMap Identit ...
- 消息队列Queue大全
消息队列Queue大全 (http://queues.io/) 作业队列,消息队列和其他队列.几乎所有你能想到的都在这. 关于 那里有很多排队系统.他们每个人都不同,是为解决某些问题而创建的.这个页面 ...
随机推荐
- [CQOI2009]dance跳舞(最大流+二分)
[CQOI2009]dance跳舞 每个人拆成$2$个点,表示是否与喜欢的人跳舞 跳$m$首舞曲时,满足最大流为$n*m$ 二分$m$,跑最大流即可 #include<cstdio> #i ...
- ofbiz idea 启动
1.下载gradle并安装到本地 2.idea引入gradle 3.gradle右键选择refresh,项目会重新编译并加载gradle的task 4.可以再编译一下 5.没问题的话打开,jar ap ...
- Hibernate快速入门之CRUD
一.Hibernate的基本概念 前言 Hibernate是一个ORM框架,ORM是Object Relational Mapping的缩写,即对象关系映射,也就是将面向对象思想的编程语言与关系型数据 ...
- weblogic+idea
1.首先是weblogic的安装,去官网下载,下载完成后,安装,然后还需要创建域,参考链接: https://www.cnblogs.com/xdp-gacl/p/4140683.html,创建域的h ...
- 小程序封装一个有输入框的modal层组件
其实很简单,就是在modal中添加新的 input <view> <modal class="modal" wx:if="{{!hiddenModal} ...
- Ubuntu16.04 重新安装误删的某个*.so文件
在使用Ubuntu系统时,如果不小心将某个*.so文件删除,该如何重新安装呢? 如果直接使用命令:sudo apt-get install *.so 可能会报错或者找不到这个*.so文件. 正确 ...
- springboot--异步执行的方法及定时执行的方法
让方法被调用后异步的执行 一般来说,要异步执行一个任务都是创建一个线程来专门干这个任务.在springboot中有 @Async 这个注解快速实现方法的异步执行.只需要两步:第一步: 在启动类上加上@ ...
- Vuex----核心概念和API
state 1)vuex管理状态的对象 2)它应该是唯一的 const state = { xxx:initValue } mutations 1)包含多个直接更新state的方法(回调函数)的对象 ...
- Spring动态数据源-AbstractRoutingDataSource
在分库分表的情况下,在执行SQL时选择连接不同的数据源(库)的思路:配置多个数据源加到动态数据源对象中,根据实际的情况动态切换到相应的数据源中. 如存放订单信息的有10个库,每个库中有100张表,根据 ...
- [USACO16JAN]愤怒的奶牛Angry Cows (单调队列优化dp)
题目链接 Solution 应该可以用二分拿部分分,时间 \(O(n^2logn)\) . 然后可以考虑 \(n^2\) \(dp\) ,令 \(f_i\) 代表 \(i\) 点被激活,然后激活 \( ...