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的详解相关推荐

  1. python创建列向量_关于Numpy中的行向量和列向量详解

    关于Numpy中的行向量和列向量详解 行向量 方式1 import numpy as np b=np.array([1,2,3]).reshape((1,-1)) print(b,b.shape) 结 ...

  2. python变量命名规则思维导图_Python思维导图详解

    Python思维导图 Python思维导图详解 第一阶段:学习Python基础语法,主要学习变量的使用以及类型.变量的计算和输入输出.变量的命名.运算符.if判断语句.while循环语句.字符串.常量 ...

  3. python print函数用法_Python3.2中Print函数用法实例详解

    本文实例讲述了Python3.2中Print函数用法.分享给大家供大家参考.具体分析如下: 1. 输出字符串 >>> strHello = 'Hello World' >> ...

  4. python列表可以删除和修改吗_Python列表常见操作详解(获取,增加,删除,修改,排序等)...

    本文实例讲述了Python列表常见操作.分享给大家供大家参考,具体如下: 列表是由一系列按特定顺序排列的元素组成的对象.因为列表通常包含多个元素, 所以建议给列表指定一个表示复数的名称. 我们用方括号 ...

  5. python定义一个字符串后怎么修改_python基础--字符串操作详解

    数字类型 整型 1.作用:对自然界的事务的数量进行计数或描述 2.定义方式(python和现实) 直接定义:a=2 强制类型转换:b='222' # b是字符串 int(b) # 强制转换成整形数字 ...

  6. python functools import wraps_python装饰器中functools.wraps的作用详解

    # 定义一个最简单的装饰器 def user_login_data(f): def wrapper(*args, **kwargs): return f(*args, **kwargs) return ...

  7. Queue+Stack(C++,标准库中的队列和栈)

    STL Queue(先进先出) 头文件#include 成员函数 queue::pop () //出队列 queue::push () //入队列 queue::size () //返回队列中元素个数 ...

  8. python decimal类型转化_python中的decimal类型转换实例详解

    [Python标准库]decimal--定点数和浮点数的数学运算 作用:使用定点数和浮点数的小数运算. Python 版本:2.4 及以后版本 decimal 模块实现了定点和浮点算术运算符,使用的是 ...

  9. python中subplot是什么意思_python matplotlib中的subplot函数使用详解

    python里面的matplotlib.pylot是大家比较常用的,功能也还不错的一个包.基本框架比较简单,但是做一个功能完善且比较好看整洁的图,免不了要网上查找一些函数.于是,为了节省时间,可以一劳 ...

最新文章

  1. 技术图文:如何利用 Python 做一个简单的定时器类?
  2. java 编写异常_Java基础编程之异常处理
  3. SQL数据库面试题以及答案!
  4. 拥抱.NET Core系列:MemoryCache 缓存域
  5. JavaScript-面向对象 class 继承
  6. 2021年中国零售OMO研究报告
  7. leetcode4:Median of Two Sorted Arrays
  8. 作业帮电脑版在线使用_一起作业学生app 手机版免费在线下载
  9. AndroidStudio安卓原生开发_SwipeRefreshLayout_下拉刷新控件---Android原生开发工作笔记119
  10. 阅读SSM项目之scm【第一篇】
  11. 常见批处理作业调度算法
  12. Windows XP 系统优化-百度转载
  13. [RK3566] 通过GM8775 点LVDS屏调试记录
  14. 使用 Nginx 实现 URL 的重定向
  15. 优秀的程序员真的不写注释吗?
  16. 一种经典的客户关系管理系统(CRM)订单模型的设计与实现
  17. STM32-定时器输入捕获实验(捕获PWM方波的频率和占空比)
  18. Python写文件到指定路径以及读取文件内容
  19. 安徽省2019c语言二级答案,二级c语言真题及答案
  20. NXP S32K344芯片开发随笔

热门文章

  1. 学python可以做什么职业好-学了那么多年python到底可以找什么工作?
  2. 电脑无法安装python-无法安装Python库
  3. python语言培训班-学python培训班需要多久?深圳Python培训
  4. python 的标准库模块glob使用教程,主要为glob.glob()使用与glob.iglob()使用
  5. xml介绍与解析,及xml库包使用
  6. lua学习笔记之开始
  7. LeetCode Valid Parentheses(判断括号是否匹配)
  8. 题目1168:字符串的查找删除
  9. sqli-labs(10)
  10. BZOJ4671: 异或图