今天讲一下队列,用到一个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. 让 Linux 防火墙新秀 nftables 为你的 VPS 保驾护航

    上篇文章 给大家介绍了 nftables 的优点以及基本的使用方法,它的优点在于直接在用户态把网络规则编译成字节码,然后由内核的虚拟机执行,尽管和 iptables 一样都是基于 netfilter, ...

  2. hdu1072 逃离迷宫系列 bfs

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1072/ 题意:逃离迷宫,路中可能有炸弹,总时间是6个单位,在有炸弹的位置,如果到达的时刻时间大于0,则恢复到6时 ...

  3. [CVPR 2019]Normalized Object Coordinate Space for Category-Level 6D Object Pose and Size Estimation

    论文地址:https://arxiv.org/abs/1901.02970    github链接:https://github.com/hughw19/NOCS_CVPR2019 类别级6D物体位姿 ...

  4. Java 访问修饰符大全详解

    鉴于笔试面试总会遇到,决心仔细认真梳理一下: 1:涉及的关键字:public,default(表示缺省),protected,private,static,final,abstract. 2:关键字含 ...

  5. 北邮OJ-257- 最近公共祖先-软件14 java

    思路分析:思路应该比较简单也很容易想的来,就是比较两个节点的最近的祖先节点,要对每个节点依次记录下他的所有祖先节点,包括其自己,因为自己也算自己的祖先节点,这一点题目中没有明确指出 所以比较坑. 我们 ...

  6. Vmware15.5安装与许可教程

    最近Windows总是提醒我1803版本的服务即将过期,劝我升级到最新版.可我在自动安装的过程中却总是安装失败.于是官网下载了更新助手.检测到的问题是升级过程和 Vmware 软件冲突,于是卸载了 V ...

  7. Android | 教你如何用华为HMS MLKit SDK 三十分钟在安卓上开发一个微笑抓拍神器

    Android | 只要三十分钟就可以在手机上开发一个微笑抓拍神器!!! 前言 前段时间Richard Yu在发布会上给大家介绍了华为HMS Core4.0,回顾发布会信息请戳: 华为面向全球发布HM ...

  8. coding++:解决Not allowed to load local resource错误-SpringBoot配置虚拟路径

    1.在SpringBoot里上传图片后返回了绝对路径,发现本地读取的环节上面出现了错误(Not allowed to load local resource),一开始用的是直接本地路径. 但是在页面上 ...

  9. ajax实现图片上传与进度条

    这里使用的是bootstract的一个插件来实现 详情请查看文档中的进度条 https://v3.bootcss.com/components/ 引入必要的文件 <link href=" ...

  10. 第 k 小的数

    一.寻找两个有序数组的中位数 1.1 问题描述 给定两个大小为 m 和 n 的不同时为空的有序数组 nums1 和 nums2.找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m ...