[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的一种变体的实现
队列和优先队列是我们十分熟悉的数据结构.提供了所谓的“先进先出”功能,优先队列则按照某种规则“先进先出”.但是他们都没有提供:“固定大小的队列”和“固定大小的优先队列”的功能. 比如我们要实现:记录按 ...
随机推荐
- netty--NioEventLoop滴干活
netty是最近项目要用到的nio框架,找了各种资料,发现称赞它的有点多,所以决定用它:其实也就二选一嘛,mina或netty或自己写.对于mina,也不熟,不过看各种介绍,貌似netty干活还是很不 ...
- .NET高级代码审计(第一课)XmlSerializer反序列化漏洞
0X00 前言 在.NET 框架中的 XmlSerializer 类是一种很棒的工具,它是将高度结构化的 XML 数据映射为 .NET 对象.XmlSerializer类在程序中通过单个 API 调用 ...
- 基于vs2012的C# winform抽奖小程序的总结
哈希表的使用 Hashtable hashtable = new Hashtable(); hashtable.ContainsValue(tmp);//判断哈希表中有没有tmp hashtable. ...
- 关于文件的INode与Java中的文件操作接口
本文由作者周梁伟授权网易云社区发布. 近日做的项目中涉及到多进程共同读写多个文件的问题,文件名和最后修改时间都是可能会被频繁修改的,因而识别文件的唯一性会产生相当的麻烦,于是专门再学习了一下文件系统对 ...
- Python廖雪峰学习笔记——操作文件和目录
查看当前目录的绝对路径: >>>os.path.abspath('.') # 在某个目录下创建一个新目录, # 首先把新目录的完整路径表示出来: >>> os.pa ...
- 201621123018《Java程序设计》第1周学习报告
1.<Java程序设计>第1周学习报告 1.本周学习报告 关键字:Java的发展.Java语言的特点.JDK.JRE.JVE.Java开发工具.Java环境配置.Java是一种面向对象的程 ...
- 简单版nginx lua 完成流量上报于中间件
本文链接:https://www.cnblogs.com/zhenghongxin/p/9131226.html 公司某些业务下,需要将请求的流量上报于中间件(kafka,rabbitMq等),让st ...
- Masnory 学习
1:typeof <一元运算符,放在一个运算数之前,运算数可以是任何类型, 用于获取括号中的运算数的数据类型如:NSString CGFloat Int NSArray等> 2: str ...
- DCL,即Double Check Lock,中卫双重检查锁定。
DCL,即Double Check Lock,中卫双重检查锁定. [Java并发编程]之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码) 关于单例.关于DCL: ...
- 《JAVA与模式》之原型模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述原型(Prototype)模式的: 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办 ...