今天讲一下队列,用到一个python自带的库,queue

队列的三种实现方法有:

      1、FIFO先入先出队列(Queue)

      2、LIFO后入先出队列(LifoQueue)

      3、优先级队列(PriorityQueue)

先讲一下Queue中的几个方法

# 三种 FIFO  LIFO Priority
# 创建先入先出的队列
# q = queue.Queue() # q.qsize() # 返回当前队列包含的消息数量
# q.empty() # 如果队列为空返回True 反之False
# q.full() # 如果队列满了,返回True 反之False
# q.get() # 获取队列,timeout等待时间 get(self, block=True,timeout=None) block表示是否等待 timeout表示等待多久
# q.put(item) # 写入队列 put(self, item, block=True,timeout=None) block表示是否等待 timeout表示等待多久
# q.get_nowait() # 相当于q.get(False) 获取不等待
# q.put_nowait() # 相当于 q.put(item,False) 写入不等待
# q.task_done() # 在完成一项工作之后,使用这个方法可以向队列发送一个信号,表示该任务执行完毕
# q.join() # 等待队列中所有任务(数据)执行完毕之后再往下执行,否则一直等待
# 注意点 :join是判断的依据。不单单指的是队列中没有数据,数据get出去之后,要使用task_done向队列发送一个信号,表示该任务执行完毕
# /数据使用完毕

在下面我们用代码来解释

Queue:先入先出队列

import queue
q1 = queue.Queue(3)  # 定义3 指定队列长度 表示只能塞3条数据 不写可以无限塞
q1.put(1) # 等待插入
q1.put(11)
q1.put(33)
# q1.put(33,block=False) # 不等待插入 满了之后报错
# q1.put_nowait(33) # 不等待插入 满了之后报错
print(q1.get())
print(q1.get()) # 先入先出获取 1先出 33最后出
print(q1.get())
# print(q1.get(block=False)) # 不等待获取 队列为空报错
# print(q1.get_nowait()) # 不等待获取 队列为空报错
# q1.put(3)
print(q1.qsize()) # 获取队列中的任务数/消息数
print(q1.full()) # 判断队列是否已满
print(q1.empty()) # 判断队列是否为空 q1.task_done()
q1.task_done()
q1.task_done() # 插入一条数据使用完成之后就要发送一条消息 q1.join() # 收到task_done返回的信号,当都使用完成之后才会继续往下执行 如果任务没有完成那将不会向下执行
print('join之后')

LifoQueue:后入先出队列

import queue

q = queue.LifoQueue(3)

q.put(1)
q.put(2)
q.put(3)
print(q.get())
print(q.get())
print(q.get()) # 后进先出 其他方法与FIFO相同

PriorityQueue:优先级队列

import queue

q = queue.PriorityQueue(3)  # 其他方法与 FIFO 相同
q.put((1, '哈哈1')) # 接受元组为参数 第一个是优先级数字型的 第二个是数据
q.put((88, '哈哈88'))
q.put((3, '哈哈3'))
print(q.get())
print(q.get())
print(q.get()) # 根据前面的优先级出,优先级数字小的先出

利用队列可以解决多线程对共享全局变量的一个处理

Python队列的三种队列方法的更多相关文章

  1. python之asyncio三种应用方法

    1.直接使用asyncio.run方法2.同步的效果,用await调用函数3.创建任务(asyncio.create_task),并发运行任务(await asyncio.gather) import ...

  2. python之selenium三种等待方法

    前提: 我们在做Web自动化时,有的时候要等待元素加载出来,才能操作,不然会报错 1.强制等待 2.隐式等待 3.显示等待 内容: 一,强制等待 这个比较简单,就是利用time模块的sleep的方法来 ...

  3. python—字符串拼接三种方法

    python—字符串拼接三种方法   1.使用加号(+)号进行拼接 字符串拼接直接进行相加就可以,比较容易理解,但是一定要记得,变量直接相加,不是变量就要用引号引起来,不然会出错,另外数字是要转换为字 ...

  4. Python+Selenium自动化-设置等待三种等待方法

    Python+Selenium自动化-设置等待三种等待方法   如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候,就需要我们通过设置一个等待条件,等待页面元素加载完成,避免出现 ...

  5. Liunx 环境下vsftpd的三种实现方法(超详细参数)

    以下文章介绍Liunx 环境下vsftpd的三种实现方法 ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.3.tar.gz,目前已经到2.0.3版本.假 ...

  6. javase-常用三种遍历方法

    javase-常用三种遍历方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; public ...

  7. JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  8. Java中Map的三种遍历方法

    Map的三种遍历方法: 1. 使用keySet遍历,while循环: 2. 使用entrySet遍历,while循环: 3. 使用for循环遍历.   告诉您们一个小秘密: (下↓面是测试代码,最爱看 ...

  9. Jquery中each的三种遍历方法

    Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(dat ...

随机推荐

  1. Mycat的简介及安装

    Mycat简介: 1.1Mycat含义 简单的说,MyCAT就是: 一个彻底开源的,面向企业应用开发的“大数据库集群” 支持事务.ACID.可以替代Mysql的加强版数据库 一个可以视为“Mysql” ...

  2. 【5min+】更好的选项实践。.Net Core中的IOptions

    系列介绍 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net ...

  3. MySQl数据类型和条件限制

    数据库的增删改查已经介绍完毕,今天从表的详细操作开始讲解 表操作 今日内容 1.数据类型 建表的时候,字段都有对应的数据类型 整型 浮点型 字符类型(char与varchar) 日期类型 枚举与集合 ...

  4. 超越Mask-RCNN:谷歌大脑的AI,自己写了个目标检测AI

    这是一只AI生出的小AI. 谷歌大脑的Quoc Le团队,用神经网络架构搜索 (NAS) ,发现了一个目标检测模型.长这样: △ 看不清请把手机横过来 它的准确率和速度都超过了大前辈Mask-RCNN ...

  5. coding++:Java 中Model 与 实体的区别

    model的字段>entity的字段,并且model的字段属性可以与entity不一致,model是用于前端页面数据展示的,而entity则是与数据库进行交互做存储用途. 举个例子: 比如在存储 ...

  6. 剑指offer刷题总结

    ★ 二维数组的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否 ...

  7. SpringBoot中遇到的一些问题

    1.JQuery和bootstrap报404的问题 在html页面导入的js和css的时候,不要加static这级目录,直接跳过即可,例如 导入的时候不需要加static目录,直接导入js/和css/ ...

  8. springboot集成通用mapper详细配置

    通常,我们利用mybatis写持久层方法.要么按照传统定义mapper方法,定义xml文件的方式,全部手写.要么需要通过mybatis-generator逆向工程插件生成大量的xxxExample文件 ...

  9. Python3安装Crypto加密包

    Python3安装Crypto加密包 下载链接 加密包地址 步骤 下载加密包,解压加密包到Python安装目录下Lib\site-packages目录中,尝试在Pycharm中导入 from Cryp ...

  10. 利用data文件恢复MySQL数据库

    背景:测试服务器 MySQL 数据库不知何种原因宕机,且无法启动,而原先的数据库并没有备份,重新搭建一个新服务器把原data 复制出来 进行恢复 1 尽量把原data复制出来(一个都不要少以防意外 其 ...