[PY3]——Queue
Queue
class Queue(builtins.object)
__init__(self, maxsize=0) empty(self) full(self) get(self, block=True, timeout=None) get_nowait(self) put(self, item, block=True, timeout=None) put_nowait(self, item) join(self) task_done(self) qsize(self)
Queue
创建一个给定最大大小(maxsize)的队列对象
if maxsize<=0,队列大小为无限大
put(self, item, block=True, timeout=None)
将item放入队列中
if block=True,timeout=None:阻塞调用,无超时
if timeout=N(N为正整数):超过N时间队列无空间可put,抛出Full异常
if block=False:只要有空闲空间就将item put入队列,否则抛出Full异常
put_nowait()
相当于put(block=False)
get(self, block=True, timeout=None)
将item移出队列
要注意:get()没有item参数,Queue是一个FIFO队列,只能是先进先出。即get的顺序是由put的顺序决定了。
if block=True,timeout=None:无超时,直到有item可get
if block=True,timeout=N:超过N时间队列还是无item可get,raise Empty
if block=Flase,timeout=None:只要有item就立刻get,否则raise Empty
get_nowait()
相当于get(block=False)
empty(self)
判断队列是否为空
空则返回True、反之返回False
task_done(self)
向完成的队列发送一个信号
qsize(self)
返回队列大小
queue=Queue(maxsize=5) # 设最大长度为5 print(queue.empty())
True for i in range(1,6):
queue.put(item=i) print(queue.full())
True print(queue.qsize()) print(queue.put(item=9,timeout=3)) #超过3秒,queue已无空间可put,抛出Full异常
queue.Full ### get():删除指定长度的元素 ###
# Example-1
val=[]
for i in range(1,3): # 这个循环就决定删除的item个数,跟item的索引和值都没啥关系...
val.append(queue.get()) print(val) # get()的返回值是删除的item值
[1,2] print(queue.full())
False print(queue.qsize()) # Example-2
print(queue.qsize()) val=[]
while not queue.qsize()==2:
try:
val.append(queue.get())
except:
break
print(val)
[1, 2, 3] ### get():删除全部队列全部元素 ###
print(queue.qsize()) val=[]
while not queue.empty():
val.append(queue.get()) print(val)
[1, 2, 3, 4, 5]
Queue+Threading
import random,time
import threading
import logging
from queue import Queue logging.basicConfig(level=logging.DEBUG,format='%(asctime)s [%(threadName)s] %(message)s',datefmt="%H:%M:%S") class Producer(threading.Thread): # Pro-Thread:产生长度为10的队列
def __init__(self,name,queue):
threading.Thread.__init__(self,name=name)
self.data=queue def run(self):
for i in range(5):
randomnum=random.randint(1,99)
self.data.put(randomnum)
logging.info("{} put item in Queue".format(randomnum))
logging.info("Finished put item in Queue") class Consumer_even(threading.Thread): # Even-Thread:取出队列中的偶数
def __init__(self,name,queue):
threading.Thread.__init__(self,name=name)
self.data=queue def run(self):
while 1:
try:
val_even=self.data.get(block=True,timeout=5) # 超过5sget不到item了,则执行except部分 # 可以只单单运行start Even-Thread看看,except不了的
if val_even%2==0:
logging.info("{} even is consumed".format(val_even))
time.sleep(2)
else:
self.data.put(val_even)
time.sleep(2)
except:
logging.info("even finished")
break class Consumer_odd(threading.Thread): # Odd—Thread:取出队列中的奇数
def __init__(self,name,queue):
threading.Thread.__init__(self,name=name)
self.data=queue def run(self):
while 1:
try:
val_odd=self.data.get(block=True,timeout=5)
if val_odd%2!=0:
logging.info("{} odd is consumed".format(val_odd))
time.sleep(2)
else:
self.data.put(val_odd)
time.sleep(2)
except:
logging.info("odd finished")
break def main():
queue=Queue()
producer=Producer('Pro',queue)
consumer_even=Consumer_even("Even",queue)
consumer_odd=Consumer_odd("Odd",queue) threads=[producer,consumer_even,consumer_odd] for thread in threads:
thread.start() for thread in threads:
thread.join() print(queue.empty()) if __name__ == '__main__':
main()
Reference Article
[PY3]——Queue的更多相关文章
- collections, time, queue的应用
collections (克来克深思) Counter from collections import Counter # 引入模块, 计数器 Counter(康特) s = 'sadfasdfas ...
- python---基础知识回顾(十)进程和线程(py2中自定义线程池和py3中的线程池使用)
一:自定义线程池的实现 前戏: 在进行自定义线程池前,先了解下Queue队列 队列中可以存放基础数据类型,也可以存放类,对象等特殊数据类型 from queue import Queue class ...
- py3.x和py2.x的区别
1.性能 Py3.0运行 pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可 以取得很好的优化结果. Py3.1性能比Py2 ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- Azure Queue Storage 基本用法 -- Azure Storage 之 Queue
Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure File Storage 基 ...
- C++ std::queue
std::queue template <class T, class Container = deque<T> > class queue; FIFO queue queue ...
- 初识Message Queue之--基础篇
之前我在项目中要用到消息队列相关的技术时,一直让Redis兼职消息队列功能,一个偶然的机会接触到了MSMQ消息队列.秉着技术还是专业的好为原则,对MSMQ进行了学习,以下是我个人的学习笔记. 一.什么 ...
- 搭建高可用的rabbitmq集群 + Mirror Queue + 使用C#驱动连接
我们知道rabbitmq是一个专业的MQ产品,而且它也是一个严格遵守AMQP协议的玩意,但是要想骚,一定需要拿出高可用的东西出来,这不本篇就跟大家说 一下cluster的概念,rabbitmq是erl ...
- PriorityQueue和Queue的一种变体的实现
队列和优先队列是我们十分熟悉的数据结构.提供了所谓的“先进先出”功能,优先队列则按照某种规则“先进先出”.但是他们都没有提供:“固定大小的队列”和“固定大小的优先队列”的功能. 比如我们要实现:记录按 ...
随机推荐
- Asp.net Core2.0, 基于 claims 实现权限验证
https://www.cnblogs.com/KimmyLee/p/6430474.html
- 论文笔记(2)-Dropout-Regularization of Neural Networks using DropConnect
这篇paper使用DropConnect来规则化神经网络.dropconnect和dropout的区别如下图所示.dropout是随机吧隐含层的输出清空,而dropconnect是input unit ...
- Python - 更改pip源至国内镜像
永久使用 [windows] 在用户名目录下创建一个目录 C:\Users\xxx\pip [linux] ~/.pip/pip.conf 新建pip.ini [global] index-url = ...
- 一起学习MVC(1)初步了解MVC
MVC 即模型视图控制器(Model View Controller) 利于团队开发.便于管理与维护.代码易读性强.未来的主流开发框架结构. 当然,缺点也显而易见,与传统开发框架相比有很大的不 ...
- LeetCode139:Word Break
题目: Given a string s and a dictionary of words dict, determine if s can be segmented into a space-se ...
- Angular6 学习笔记——组件详解之模板语法
angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...
- 请教如何用ASP.NET实现http://abc.com/orderID这样的URL???
我查看了一下微信二维码的内容是:https://u.wechat.com/XXXXXXXXX这种格式. 我现在想把我们的订单URL也做成 http://abc.com/orderID这样子,做成二维码 ...
- 对于equals和==的理解
很多时候equals和==大家都分不太清楚怎么样来使用,今天小编就来教大家怎么使用 equals比较的是两个变量的值是否相等 而==则比较的是这个变量的内存地址是否相同 打个比方来说 String a ...
- Django(图书管理系统1)
day63 内容回顾 1. 单表的增删改查 1. 删和改 1. GET请求 URL传值 1. 格式 ...
- 一个MySQL 5.7 分区表性能下降的案例分析
告知MySQL5.7.18的使用者分区表使用中存在的陷阱,避免在该版本上继续踩坑.同时通过对源码的讲解,升级MySQL5.7.18时分区表性能下降的根本原因,向MySQL源码爱好者展示分区表实现中锁的 ...