当前位置: 首页 > news >正文

python队列Queue

 

python2, 参考思路.

Queue

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

基本FIFO队列

class Queue.Queue(maxsize=0)

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

举个栗子:

LIFO队列

class Queue.LifoQueue(maxsize=0)

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

再举个栗子:

优先级队列

class Queue.PriorityQueue(maxsize=0)

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

一些常用方法

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异常

其非阻塞版本为put_nowait等同于put(item, False)

get([block[, timeout]])

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

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

empty()

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

 

转载于:https://www.cnblogs.com/pythonClub/p/10253479.html

相关文章:

  • [转]让Linux进入虚拟机 Virtualenv
  • C++学习二十C++中函数重载的理解
  • vuex存储和本地存储(localstorage、sessionstorage)的区别
  • Ubuntu下postgresql安装及常见错误处理
  • [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)
  • IP 别名和辅助 IP 地址
  • python 使用多线程进行并发编程/互斥锁的使用
  • 树莓派Ubuntu 16.04 MATA系统 修改用户文件夹名后,提示configure it with blueman-service...
  • 基于websocket的单聊.群聊
  • Python(76)_装饰器进阶_带参数的装饰器
  • 烂泥分享的镜像下载地址
  • @RestControllerAdvice异常统一处理类失效原因
  • Webstorm 操作 HTML文件时的快捷键
  • 三次握手与四次挥手
  • Java使用RSA加密解密签名及校验
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • echarts花样作死的坑
  • HTTP那些事
  • javascript面向对象之创建对象
  • js数组之filter
  • Linux快速复制或删除大量小文件
  • ViewService——一种保证客户端与服务端同步的方法
  • 创建一个Struts2项目maven 方式
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前嗅ForeSpider中数据浏览界面介绍
  • 如何使用 JavaScript 解析 URL
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 一道闭包题引发的思考
  • ​flutter 代码混淆
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • (1)Android开发优化---------UI优化
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (九)信息融合方式简介
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (强烈推荐)移动端音视频从零到上手(上)
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (未解决)macOS matplotlib 中文是方框
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • *p++,*(p++),*++p,(*p)++区别?
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .bat批处理出现中文乱码的情况
  • .Net FrameWork总结
  • .NET 读取 JSON格式的数据
  • .NET 指南:抽象化实现的基类
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • @Autowired和@Resource装配
  • @font-face 用字体画图标
  • @在php中起什么作用?
  • [\u4e00-\u9fa5] //匹配中文字符
  • [2010-8-30]
  • [2023年]-hadoop面试真题(一)