Python的queue模块详解

Queue

queue是python标准库中的线程安全的队列(fifo)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递

基本FIFO队列

class Queue.Queue(maxsize=0)

FIFO即First in First Out,先进先出。Queue提供了一个基本的FIFO容器,使用方法很简单,maxsize是个整数,指明了队列中能存放的数据个数的上限。一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉。如果maxsize小于或者等于0,队列大小没有限制。

举个栗子:

1 import Queue2 3 q = Queue.Queue()4 5 for i in range(5):6     q.put(i)7 8 while not q.empty():9     print q.get()

登录后复制

 

立即学习“Python免费学习笔记(深入)”;

输出:

01234

登录后复制

 

立即学习“Python免费学习笔记(深入)”;

LIFO队列

class Queue.LifoQueue(maxsize=0)

LIFO即Last in First Out,后进先出。与栈的类似,使用也很简单,maxsize用法同上

再举个栗子:

1 import Queue2 3 q = Queue.LifoQueue()4 5 for i in range(5):6     q.put(i)7 8 while not q.empty():9     print q.get()

登录后复制

 

立即学习“Python免费学习笔记(深入)”;

输出:

43210

登录后复制

 

立即学习“Python免费学习笔记(深入)”;

可以看到仅仅是将Queue.Quenu类替换为Queue.LifiQueue类

优先级队列

class Queue.PriorityQueue(maxsize=0)

构造一个优先队列。maxsize用法同上。

import Queueimport threadingclass Job(object):def __init__(self, priority, description):        self.priority = priority        self.description = descriptionprint 'Job:',descriptionreturndef __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 jobJob: level 10 jobJob: level 1 jobfor: level 1 jobfor: level 3 jobfor: job: level 10 job

登录后复制

 

立即学习“Python免费学习笔记(深入)”;

一些常用方法

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模块详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2268111.html

(0)
上一篇 2025年2月27日 10:32:42
下一篇 2025年2月24日 07:59:05

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • python的简单的登陆和注册功能实现

    大致的思路 我是分别写了五个函数 fileRead() 文件读取 登录后复制 FileWrite()文件写入 登录后复制 FileModify()文件修改 登录后复制 Register()注册 登录后复制 Login()登陆来实现整个功能的…

    编程技术 2025年2月27日
    200
  • 有哪些计算机语言的软件

    常见的计算机语言软件包括:编译器(将源代码翻译成机器代码)、解释器(逐行执行源代码)、集成开发环境(提供综合开发工具)、文本编辑器(创建和编辑源代码)、调试器(查找和修复错误)、版本控制系统(管理代码更改)、测试框架(编写和运行测试用例)、…

    2025年2月27日
    200
  • 比例的计算机语言有哪些

    计算机科学中用于表示和操作比例的语言和技术包括:Python:Fraction 和 Decimal 类JavaScript:Number 类型和 Big 对象C++:ratio 头文件和 boost 库Rust:num 库中的 Ratio …

    2025年2月27日
    200
  • python析构函数与构造函数的用法讲解

      class Test(object):    def __init__(self, name):        self.name = name        print(‘这是构造函数’)    def say_hi(self):  …

    2025年2月27日
    200
  • python使用join的两个实例分享

    python使用join的两个实例分享 a1 = {: , : , : , : = open(,,encoding= key === + 登录后复制 如果你想要合并(列表,元组,字典,文件,集合或生成器等)的字符串是一个序列或者iterab…

    编程技术 2025年2月27日
    200
  • 有哪些优秀的计算机语言

    计算机编程语言的选择取决于项目需求和开发人员技能。杰出的编程语言包括:Python(多用途)、C++(速度和效率)、Java(平台无关)、JavaScript(Web 开发)、C#(.NET 框架)、Swift(苹果应用程序开发)、Go(云…

    2025年2月27日
    200
  • python–条件语句与循环语句

    今天我们看看条件语句与循环语句。 预习: 1、使用while循环输出1 2 3 4 5 6 8 9 10 2、求1-100的所有数的和 3、输出 1-100 内的所有奇数 立即学习“Python免费学习笔记(深入)”; 4、输出 1-100…

    2025年2月27日
    200
  • python之变量的学习介绍

    变量 变量是将储存的值保存在内存中。当声明一个变量的时候会在内存中开辟一个储存内容的位置。 基于变量的数据类型,解释器分配内存空间并决定储存的内容。因此我们可以通过变量分配不同的数据类型,可以在变量中储存数据类型为整数,小数,字符等 在py…

    编程技术 2025年2月27日
    200
  • 专用的计算机语言有哪些

    专用计算机语言是专门针对特定领域或任务设计的编程语言,其优点包括简化开发、提高效率和准确性,缺点则是有时学习曲线更陡峭,且可移植性较低。 专用的计算机语言 专用的计算机语言是针对特定领域或任务而设计的编程语言。它们提供特定于该领域的特性、语…

    2025年2月27日
    200
  • 在Windows上如何共存多版本Python

    1、如果是windows,建议在安装路径下的pip分别改成pip2和pip3进行区分2、如果是linux, 也是同样的办法,将pip的软链接删除,增加pip2和pip3的软件进行区分。pip会自动安装对应的包 目前国内网站经常会让大家把其中…

    编程技术 2025年2月27日
    200

发表回复

登录后才能评论