python queue 查询是否在队列中_python队列Queue的详解
Queue
Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递
基本FIFO队列
class Queue.Queue(maxsize=0)
FIFO即First in First Out,先进先出。Queue提供了一个基本的FIFO容器,使用方法很简单,maxsize是个整数,指明了队列中能存放的数据个数的上限。一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉。如果maxsize小于或者等于0,队列大小没有限制。
举个栗子:
import Queue
q = Queue.Queue()
for i in range(5):
q.put(i)
while not q.empty():
print q.get()
输出:
0
1
2
3
4
LIFO队列
class Queue.LifoQueue(maxsize=0)
LIFO即Last in First Out,后进先出。与栈的类似,使用也很简单,maxsize用法同上
再举个栗子:
import Queue
q = Queue.LifoQueue()
for i in range(5):
q.put(i)
while not q.empty():
print q.get()
输出:
4
3
2
1
0
可以看到仅仅是将Queue.Quenu类替换为Queue.LifiQueue类
优先级队列
class Queue.PriorityQueue(maxsize=0)
构造一个优先队列。maxsize用法同上。
import Queue
import threading
class Job(object):
def __init__(self, priority, description):
self.priority = priority
self.description = description
print 'Job:',description
return
def __cmp__(self, other):
return cmp(self.priority, other.priority)
q = Queue.PriorityQueue()
q.put(Job(3, 'level 3 job'))
q.put(Job(10, 'level 10 job'))
q.put(Job(1, 'level 1 job'))
def process_job(q):
while True:
next_job = q.get()
print 'for:', next_job.description
q.task_done()
workers = [threading.Thread(target=process_job, args=(q,)),
threading.Thread(target=process_job, args=(q,))
]
for w in workers:
w.setDaemon(True)
w.start()
q.join()
结果
Job: level 3 job
Job: level 10 job
Job: level 1 job
for: level 1 job
for: level 3 job
for: job: level 10 job
一些常用方法
task_done()
意味着之前入队的一个任务已经完成。由队列的消费者线程调用。每一个get()调用得到一个任务,接下来的task_done()调用告诉队列该任务已经处理完毕。
如果当前一个join()正在阻塞,它将在队列中的所有任务都处理完时恢复执行(即每一个由put()调用入队的任务都有一个对应的task_done()调用)。
join()
阻塞调用线程,直到队列中的所有任务被处理掉。
只要有数据被加入队列,未完成的任务数就会增加。当消费者线程调用task_done()(意味着有消费者取得任务并完成任务),未完成的任务数就会减少。当未完成的任务数降到0,join()解除阻塞。
put(item[, block[, timeout]])
将item放入队列中。
如果可选的参数block为True且timeout为空对象(默认的情况,阻塞调用,无超时)。
如果timeout是个正整数,阻塞调用进程最多timeout秒,如果一直无空空间可用,抛出Full异常(带超时的阻塞调用)。
如果block为False,如果有空闲空间可用将数据放入队列,否则立即抛出Full异常
其非阻塞版本为put_nowait等同于put(item, False)
get([block[, timeout]])
从队列中移除并返回一个数据。block跟timeout参数同put方法
其非阻塞方法为`get_nowait()`相当与get(False)
empty()
如果队列为空,返回True,反之返回False
以上所述是小编给大家介绍的python队列Queue详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
本文标题: python队列Queue的详解
本文地址: http://www.cppcns.com/jiaoben/python/258944.html
python queue 查询是否在队列中_python队列Queue的详解相关推荐
- python创建列向量_关于Numpy中的行向量和列向量详解
关于Numpy中的行向量和列向量详解 行向量 方式1 import numpy as np b=np.array([1,2,3]).reshape((1,-1)) print(b,b.shape) 结 ...
- python变量命名规则思维导图_Python思维导图详解
Python思维导图 Python思维导图详解 第一阶段:学习Python基础语法,主要学习变量的使用以及类型.变量的计算和输入输出.变量的命名.运算符.if判断语句.while循环语句.字符串.常量 ...
- python print函数用法_Python3.2中Print函数用法实例详解
本文实例讲述了Python3.2中Print函数用法.分享给大家供大家参考.具体分析如下: 1. 输出字符串 >>> strHello = 'Hello World' >> ...
- python列表可以删除和修改吗_Python列表常见操作详解(获取,增加,删除,修改,排序等)...
本文实例讲述了Python列表常见操作.分享给大家供大家参考,具体如下: 列表是由一系列按特定顺序排列的元素组成的对象.因为列表通常包含多个元素, 所以建议给列表指定一个表示复数的名称. 我们用方括号 ...
- python定义一个字符串后怎么修改_python基础--字符串操作详解
数字类型 整型 1.作用:对自然界的事务的数量进行计数或描述 2.定义方式(python和现实) 直接定义:a=2 强制类型转换:b='222' # b是字符串 int(b) # 强制转换成整形数字 ...
- python functools import wraps_python装饰器中functools.wraps的作用详解
# 定义一个最简单的装饰器 def user_login_data(f): def wrapper(*args, **kwargs): return f(*args, **kwargs) return ...
- Queue+Stack(C++,标准库中的队列和栈)
STL Queue(先进先出) 头文件#include 成员函数 queue::pop () //出队列 queue::push () //入队列 queue::size () //返回队列中元素个数 ...
- python decimal类型转化_python中的decimal类型转换实例详解
[Python标准库]decimal--定点数和浮点数的数学运算 作用:使用定点数和浮点数的小数运算. Python 版本:2.4 及以后版本 decimal 模块实现了定点和浮点算术运算符,使用的是 ...
- python中subplot是什么意思_python matplotlib中的subplot函数使用详解
python里面的matplotlib.pylot是大家比较常用的,功能也还不错的一个包.基本框架比较简单,但是做一个功能完善且比较好看整洁的图,免不了要网上查找一些函数.于是,为了节省时间,可以一劳 ...
最新文章
- 技术图文:如何利用 Python 做一个简单的定时器类?
- java 编写异常_Java基础编程之异常处理
- SQL数据库面试题以及答案!
- 拥抱.NET Core系列:MemoryCache 缓存域
- JavaScript-面向对象 class 继承
- 2021年中国零售OMO研究报告
- leetcode4:Median of Two Sorted Arrays
- 作业帮电脑版在线使用_一起作业学生app 手机版免费在线下载
- AndroidStudio安卓原生开发_SwipeRefreshLayout_下拉刷新控件---Android原生开发工作笔记119
- 阅读SSM项目之scm【第一篇】
- 常见批处理作业调度算法
- Windows XP 系统优化-百度转载
- [RK3566] 通过GM8775 点LVDS屏调试记录
- 使用 Nginx 实现 URL 的重定向
- 优秀的程序员真的不写注释吗?
- 一种经典的客户关系管理系统(CRM)订单模型的设计与实现
- STM32-定时器输入捕获实验(捕获PWM方波的频率和占空比)
- Python写文件到指定路径以及读取文件内容
- 安徽省2019c语言二级答案,二级c语言真题及答案
- NXP S32K344芯片开发随笔
热门文章
- 学python可以做什么职业好-学了那么多年python到底可以找什么工作?
- 电脑无法安装python-无法安装Python库
- python语言培训班-学python培训班需要多久?深圳Python培训
- python 的标准库模块glob使用教程,主要为glob.glob()使用与glob.iglob()使用
- xml介绍与解析,及xml库包使用
- lua学习笔记之开始
- LeetCode Valid Parentheses(判断括号是否匹配)
- 题目1168:字符串的查找删除
- sqli-labs(10)
- BZOJ4671: 异或图