[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的一种变体的实现
队列和优先队列是我们十分熟悉的数据结构.提供了所谓的“先进先出”功能,优先队列则按照某种规则“先进先出”.但是他们都没有提供:“固定大小的队列”和“固定大小的优先队列”的功能. 比如我们要实现:记录按 ...
随机推荐
- EasyUI 让dialog中的treegrid的列头固定
先上效果: 最主要是在treegrid要加上"fit:true "如果不加那么就会用diglog的滚动条,导致treegrid的头就没办法固定. Code<div id=&q ...
- c#使用NPOI快速导出到Excel
接上篇博文<C#快速导出到excel>:由于此种方法不能导出成.xlsx格式,为解决此问题,本次分享使用NPOI. 参考:https://www.cnblogs.com/lazyneal/ ...
- WPF之坑——surface触控失灵之谜
本次又遇到了WPF编写触控程序的一个问题,虽然已解决,但原因确搞不太明白,希望有大神看到这篇文章帮我解答. 在项目中实现了自己定义的icommandsource,因为需要对触控有特殊需求,控件对鼠标与 ...
- 2D Circular Geometry Kernel ( Geometry Kernels) CGAL 4.13 -User Manual
1 Introduction The goal of the circular kernel is to offer to the user a large set of functionalitie ...
- SQL查询和替换含有回车,空格,TAB,等
---如下是查询语句 --查询名称有退格键 ),item_name) go --查询名称有制表符tab ),item_name) go --查询名称有换行 ),item_name) go --查询名称 ...
- 【cocos2d-x 仙凡奇缘-网游研发(2) 角色换线系统】
转载请注明出处:http://www.cnblogs.com/zisou/p/xianfan01.html 做一款游戏就先得制作好策划文档,和基本的人物世界构架的设计,然后架空在这样一个虚拟的世界中每 ...
- jenkins 配置。
为了避免在jenkins操作过程中的权限问题. 将安装在/Users/Shared/jenkins目录下的卸载. sudo launchctl unload /Library/LaunchDaemon ...
- python爬虫2——下载文件(中华网图片库下载)
# -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf ...
- webpack快速入门——Json配置文件使用
在实际工作中,我们的项目都会配置一个Json的文件或者说API文件,作为项目的配置文件. 有时候你也会从后台读取到一个json的文件,这节课就学习如何在webpack环境中使用Json. 如果你会we ...
- 【JavaScript】call和apply区别及使用方法
一.方法的定义call方法: 语法:fun.call(thisArg[, arg1[, arg2[, ...]]])定义:调用一个对象的一个方法,以另一个对象替换当前对象.说明:call 方法可以用来 ...