Python_queue单项队列
队列(queue),实现程序间的松耦合
队列的三种类:
- class queue.Queue(maxsize)# 先进先出, maxsize 指定队列长度,线程安全的清况下,可以放入实例,对实例进行传输
- class queue.LifoQueue(maxsize) # 后进先出(栈)
- class queue.PriorityQueue(maxsize) # 存储数据是可设置优先级的队列
每个类都有相似的方法:
| q.qsize() | 返回队列的个数 |
| q.empty() | 判断队列是否为空 |
| q.full() | 判断队列是否填满了 |
| q.put(item,block = True, timeout = None) | 把数据放入一个队列,队列满的时候阻塞了,用timeout限定时间,超过时间报异常,否则队列一直等着. |
| q.get() | 拿出队列内的元素, |
| q.put_nowait() | 如果队列满了直接不等待,抛异常 |
| q.get_nowait() | 如果队列里没有东西,直接抛异常 |
| q.task_done() | 在生产者-消费者模型中队列作为一个传送带,次方法如一个信号 |
import queue q = queue.Queue() q.put([32,None,'hello'])
q.put([45,34,77])
print(q.qsize())
print(q.empty())
print(q.full())
print('\n')
print(q.get()) # 队列按照先进先出
for i in q.get():
print(i)
例:example
2
False
False [32, None, 'hello']
45
34
77
result
其中:
- exception queue.Empty #get()阻塞 ,get_nowait()非阻塞抛此异常
- exception queue.Full #put()等待, put_nowait() 给queue设置长度时,队列满则抛此异常
注:在PriorityQueue()中,put的时候有两个参数((优先级,数值),timeout=None)(优先级1>10)
import queue
q = queue.PriorityQueue(maxsize=3) q.put((1,19))
q.put((10,[34, ]),timeout=2)
q.put((4,[32,None,'hello']))
print(q.qsize())
print(q.full())
print(q.get()) # 队列按照先进先出
print(q.get()) # 队列按照先进先出
print(q.get()) # 队列按照先进先出
例:PriorityQueue
3
True
(1, 19)
(4, [32, None, 'hello'])
(10, [34])
result
多线程基于Queue的生产者--消费者模型:
import queue,threading
import time
def consumer(n):
while True:
print('消费者[%s]号吃掉了包子:【%s】'%(n,q.get()))
time.sleep(1)
q.task_done() # **通知队列吃完一个,全都吃完啦,然后才通知生产者 def producer(n):
count = 1
while True:
time.sleep(0.5)
if q.qsize()<3:
print('生产者[%s]生产一个新的包子:【%s】'%(n,count))
q.put(count)
count += 1
q.join() # 等待队列的通知
print('所有的包子都被吃完啦。。') q = queue.Queue()
for i in range(3): # 消费者
c = threading.Thread(target=consumer,args=[i,])
c.start()
for i in range(5): # 生产者
p = threading.Thread(target=producer,args=['Presley',])
p.start()
生产者_消费者模型
生产者[Presley]生产一个新的包子:【1】
消费者[0]号吃掉了包子:【1】
生产者[Presley]生产一个新的包子:【1】
消费者[1]号吃掉了包子:【1】
生产者[Presley]生产一个新的包子:【1】
消费者[2]号吃掉了包子:【1】
生产者[Presley]生产一个新的包子:【1】
生产者[Presley]生产一个新的包子:【1】
消费者[0]号吃掉了包子:【1】
消费者[1]号吃掉了包子:【1】
所有的包子都被吃完啦。。
所有的包子都被吃完啦。。
所有的包子都被吃完啦。。
所有的包子都被吃完啦。。
所有的包子都被吃完啦。。
生产者[Presley]生产一个新的包子:【2】
生产者[Presley]生产一个新的包子:【2】
生产者[Presley]生产一个新的包子:【2】
消费者[2]号吃掉了包子:【2】
消费者[0]号吃掉了包子:【2】
生产者[Presley]生产一个新的包子:【2】
消费者[1]号吃掉了包子:【2】
生产者[Presley]生产一个新的包子:【2】
消费者[2]号吃掉了包子:【2】
消费者[1]号吃掉了包子:【2】
所有的包子都被吃完啦。。
所有的包子都被吃完啦。。
所有的包子都被吃完啦。。
所有的包子都被吃完啦。。
所有的包子都被吃完啦。。
生产者[Presley]生产一个新的包子:【3】
生产者[Presley]生产一个新的包子:【3】
生产者[Presley]生产一个新的包子:【3】
消费者[1]号吃掉了包子:【3】
消费者[0]号吃掉了包子:【3】
生产者[Presley]生产一个新的包子:【3】
消费者[2]号吃掉了包子:【3】
生产者[Presley]生产一个新的包子:【3】
消费者[2]号吃掉了包子:【3】
消费者[0]号吃掉了包子:【3】
所有的包子都被吃完啦。。
所有的包子都被吃完啦。。
所有的包子都被吃完啦。。
所有的包子都被吃完啦。。
所有的包子都被吃完啦。。
生产者[Presley]生产一个新的包子:【4】
消费者[1]号吃掉了包子:【4】
生产者[Presley]生产一个新的包子:【4】
消费者[2]号吃掉了包子:【4】
生产者[Presley]生产一个新的包子:【4】
消费者[0]号吃掉了包子:【4】
生产者[Presley]生产一个新的包子:【4】
生产者[Presley]生产一个新的包子:【4】
.
.
.
.
....
result
Python_queue单项队列的更多相关文章
- Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)
Counter(计数器) 是一个字典的子类,存储形式同样为字典,其中存储的键为字典的元素,值为元素出现的次数,在使用之前我们需要先导入文件 import collections 初始化一个计数器 im ...
- 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)
Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuq ...
- python-Day3-set 集合-counter计数器-默认字典(defaultdict) -可命名元组(namedtuple)-有序字典(orderedDict)-双向队列(deque)--Queue单项队列--深浅拷贝---函数参数
上节内容回顾:C语言为什么比起他语言块,因为C 会把代码变异成机器码Pyhton 的 .pyc文件是什么python 把.py文件编译成的.pyc文件是Python的字节码, 字符串本质是 字符数组, ...
- python基础知识4——collection类——计数器,有序字典,默认字典,可命名元组,双向队列
1.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 Counter 我们从中挑选一些相对常用的方法来举例: 在上面的例子 ...
- Python学习笔记——基础篇2【第三周】——计数器、有序字典、元组、单(双)向队列、深浅拷贝、函数、装饰器
目录 1.Python计数器Counter 2.Python有序字典OrderredDict 3.Python默认字典default 4.python可命名元组namedtuple 5.Python双 ...
- Java数据结构和算法(五)——队列
前面一篇博客我们讲解了并不像数组一样完全作为存储数据功能,而是作为构思算法的辅助工具的数据结构——栈,本篇博客我们介绍另外一个这样的工具——队列.栈是后进先出,而队列刚好相反,是先进先出. 1.队列的 ...
- java算法-单向队列
队列是一种:先进先出,后进后出的数据结构 单项队列: 从前面删除元素,从后面插入元素,跟现实中排队是一样的道理 这里我们用指针移动位置的方法.因为数组删除元素,如果我们要跟现实中排队效果一样,就需要移 ...
- queue之#单向消息队列
import queue q = queue.Queue() #创建一个单项队列qsize 查看这个单项队列元素的个数empty 与 clear功能是一样的full 是用来查看这个队列是否填满了,队列 ...
- deque-->collections之#双向消息队列
deque 双向队列单项队列 方法: append #往右边添加一个appendleft #左边添加clear #清空队列count #看看这个队列里某个元素出现了多少次extend #从右边多个元素 ...
随机推荐
- Django url (路由)
1.路由的基本使用 #url 是个函数,有四个参数,第一个参数要传正则表达式,第二个参数传函数内存地址,第三个传默认参数,第四个传路由别名 url(r'^yaopipqideneirong/art ...
- Magento2自定义命令
命令命名准则 命名指南概述 Magento 2引入了一个新的命令行界面(CLI),使组件开发人员能够插入模块提供的命令. Command name Command name 在命令中,它紧跟在命令的名 ...
- jatoolsprinter web打印控件直接打印不弹出
1.功能 主要是实现页面点击按钮,不弹窗,直接打印. 可以指定某个打印机打印 可以使用默认打印机打印 2.版本 主要有:免费版跟付费版 免费版官网:http://printfree.jatools.c ...
- Vue, React, AngularJS, Angular2 我们对流行JavaScript框架们的选择
转自<奇舞周刊>,好文章mark一下 分割线 一个有趣的事实是:IBM发表的2017年最值得学习的编程语言名单中,JavaScript榜上有名.这位IT巨头指出,JS在网站中惊人地达到94 ...
- GIT-Bonobo.Git.Server的使用
GIT-Bonobo.Git.Server的使用 登录 (默认用户:admin/admin) 创建用户: 创建团队,勾选用户 创建新库 保存完成!
- ACM-ICPC 2018 沈阳赛区网络预赛 D Made In Heaven(第k短路,A*算法)
https://nanti.jisuanke.com/t/31445 题意 能否在t时间内把第k短路走完. 分析 A*算法板子. #include <iostream> #include ...
- [物理学与PDEs]第4章第1节 引言
1. 本章讨论可燃流体在流动过程中同时伴随着燃烧现象的情况. 2. 燃烧有两种, 一种是爆燃 (deflagration): 火焰低速向前传播, 此时流体微元通常是未燃气体.已燃气体的混合物; 一 ...
- 使用echarts-for-react 绘制折线图 报错:`series.type should be specified `
解决办法: 在动态获取值的函数前面加 访问器属性 get ,去获取对象的属性 @inject('commonStore', 'reportUIStore') @observer class Line ...
- zTree动态初始化树形结构加载
zTree动态加载初始化,纠结了一小下.最终还是做出来了.注意动态获取数据在前,初始化树形结构放在成功的回调函数中,并放在$(document).ready(function () {})中: $(d ...
- .Net IOC框架入门之三 Autofac
一.简介 Autofac是.NET领域最为流行的IOC框架之一,传说是速度最快的一个 目的 1.依赖注入的目的是为了解耦. 2.不依赖于具体类,而依赖抽象类或者接口,这叫依赖倒置. 3.控制反转即 ...