Python——queue

2023-11-04

Queue

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

基本FIFO队列

class Queue.Queue(maxsize=0)

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

举个栗子:

?

1

2

3

4

5

6

7

8

9

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用法同上

再举个栗子:

?

1

2

3

4

5

6

7

8

9

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用法同上。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

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放入队列中。

  1. 如果可选的参数block为True且timeout为空对象(默认的情况,阻塞调用,无超时)。
  2. 如果timeout是个正整数,阻塞调用进程最多timeout秒,如果一直无空空间可用,抛出Full异常(带超时的阻塞调用)。
  3. 如果block为False,如果有空闲空间可用将数据放入队列,否则立即抛出Full异常
  4. 其非阻塞版本为put_nowait等同于put(item, False)

get([block[, timeout]])

从队列中移除并返回一个数据。block跟timeout参数同put方法

其非阻塞方法为`get_nowait()`相当与get(False)

empty()

如果队列为空,返回True,反之返回False

以上所述是小编给大家介绍的python队列Queue详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python——queue 的相关文章

随机推荐

  • Linux C++ 网络编程基础(2) : TCP多线程一个server对应多个client

    目录 一 linux posix线程相关函数介绍 二 tcp server基础版本 三 tpc服务端多线程版本 四 tpc客户端代码 tcp编程时 一个server可以对应多个client server端用多线程可以实现 linux下多线程
  • bash_profile和.bashrc的区别

    1 etc profile 此文件为系统的每个用户设置环境信息 当用户第一次登录时 该文件被执行 并从 etc profile d目录的配置文件中搜集shell的设置 2 etc bashrc 为每一个运行bash shell的用户执行此文
  • Java中关于thread的停止问题

    stop Deprecated public final void stop Throwable obj 已过时 该方法具有固有的不安全性 请参阅 stop 以获得详细信息 该方法的附加危险是它可用于生成目标线程未准备处理的异常 包括若没有
  • DES加密Delphi、C#互通(CBC加密模式)

    Delphi 目录 https blog csdn net dkbnull article details 87935698 unit Unit1 interface uses Windows Classes SysUtils Dialog
  • Docker实战-编写Dockerfile

    一 编译镜像 1 编译镜像 Dockerfile类似于Makfile 用户使用docker build就可以编译镜像 使用该命令可以设置编译镜像时使用的CPU数量 内存大小 文件路径等 语法 docker build OPTIONS PAT
  • 初学Spring框架

    Spring 是一个java 项目开发的框架技术 所谓框架可以看成一个项目的半成品 已经具备了一个项目项目的基本骨架部分 需要自己实现一些具体的内容 Spring官网 初学Spring框架 Spring Framework 简介 IoC 入
  • Unity实战篇:讨论动画过程和计算伤害之间的关系

    在开发游戏的时候 我们会遇到这样的需求 当人物的攻击落到敌人身上时 播放特效 声效 产生伤害 等等一系列要求 那么我们要怎么实现呢 先了解一下怎么添加动画帧事件 https blog csdn net qq 15020543 article
  • Matlab学习5-图像处理之图像乘法、除法、边缘检测

    Matlab学习5 图像处理之逻辑运算 图像乘法 除法 边缘检测 1 图像乘法 效果 代码 图像相乘 img1 imread img rice png img2 imread img F4 11b MASK bmp img3 immulti
  • 【Getting Started with LLVM Core Libraries】P30 3.4 实验 使用独立工具

    LLVM学习笔记 Getting Started with LLVM Core Libraries P30 3 4 实验 使用独立工具 我们来看一个由分散在多个源文件中的函数组成的简单的C程序 但是 我们使用独立工具也可以获得相同的结果 为
  • 重定向爬虫和多线程爬虫

    前言 重定向爬虫是指在抓取网页时 如果目标网站内部存在重定向机制 即当你访问一个网页时 服务器会把你重定向到另一个目标网页 重定向爬虫可以帮助我们发现这种重定向链接 从而更有效地抓取目标网站的内容 要实现重定向爬虫 你需要在爬虫代码中添加重
  • 【云原生进阶之PaaS中间件】第一章Redis-1.2数据类型

    1 Redis 数据类型 Redis支持五种数据类型 string 字符串 hash 哈希 list 列表 set 集合 及zset sorted set 有序集合 1 1 String 字符串 string是redis最基本的类型 你可以
  • GridView横向滚动

    GridView和ListView都是android比较重要的控件 但是横滚的控件不是太多 这里介绍怎么把GridView横向滚动起来 看到其他网友也有相应的解决方法 自己只是把这些知识总结一下 供大家参考 首先让GridView横向滚动需
  • MySQL慢查询优化

    目录 优化方式 sql语句优化 索引优化 explain分析执行计划 show profile分析SQL trace分析优化器执行计划 通过慢查询日志定位那些执行效率低的SQL语句 MySQL大分页查询问题 一文详解MySQL各种锁及MVC
  • Android获取assets子目录注意事项

    获取assets子目录方法 span style font size 14px String subList getAssets list subdir span 返回当前目录下的所有文件 夹名 但不包含当前目录下子目录的文件 夹名 如果需
  • react源码中的hooks

    今天 让我们一起深入探究 React Hook 的实现方法 以便更好的理解它 但是 它的各种神奇特性的不足是 一旦出现问题 调试非常困难 这是由于它的背后是由复杂的堆栈追踪 stack trace 支持的 因此 通过深入学习 React 的
  • nacos的使用(借鉴淘宝Diamond配置中心)

    nacos常见的使用方法无非就是将获取到的配置文件放入propertise文件中 再从propertise中获取内容 如果配置过多 每增加一个nacos配置就得加一个propertise文件 文件多了 不便于维护 像一些需要经常改动的配置
  • softmax(二):softmax交叉熵不是真正的目标函数

    最近一直在消化 吸收大神的输出 在这里主要把思路捋顺 试着增加自己的理解和扩展 首先 上链接 还有我的膝盖 拜王峰大神 可以直接看大神的文字 从最优化的角度看待Softmax损失函数 Softmax理解之Smooth程度控制 一 优化的目标
  • 常用的设计模式

    单例模式 简单点说 就是一个应用程序中 某个类的实例对象只有一个 你没有办法去new 因为构造器是被private修饰的 一般通过getInstance 的方法来获取它们的实例 getInstance 的返回值是一个对象的引用 并不是一个新
  • 数据库MySQL-索引(含常见面试题)

    目录 一 什么是索引 二 索引的作用 三 索引优缺点及场景 1 优点 2 缺点 3 使用场景 4 注意事项 四 索引的使用 1 索引分类 2 查看索引 3 创建索引 重点 4 索引和约束的区别 容易混淆 五 索引实现原理 索引失效 2 实现
  • Python——queue

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