Python队列的三种队列方法
今天讲一下队列,用到一个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队列的三种队列方法的更多相关文章
- python之asyncio三种应用方法
1.直接使用asyncio.run方法2.同步的效果,用await调用函数3.创建任务(asyncio.create_task),并发运行任务(await asyncio.gather) import ...
- python之selenium三种等待方法
前提: 我们在做Web自动化时,有的时候要等待元素加载出来,才能操作,不然会报错 1.强制等待 2.隐式等待 3.显示等待 内容: 一,强制等待 这个比较简单,就是利用time模块的sleep的方法来 ...
- python—字符串拼接三种方法
python—字符串拼接三种方法 1.使用加号(+)号进行拼接 字符串拼接直接进行相加就可以,比较容易理解,但是一定要记得,变量直接相加,不是变量就要用引号引起来,不然会出错,另外数字是要转换为字 ...
- Python+Selenium自动化-设置等待三种等待方法
Python+Selenium自动化-设置等待三种等待方法 如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候,就需要我们通过设置一个等待条件,等待页面元素加载完成,避免出现 ...
- Liunx 环境下vsftpd的三种实现方法(超详细参数)
以下文章介绍Liunx 环境下vsftpd的三种实现方法 ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.3.tar.gz,目前已经到2.0.3版本.假 ...
- javase-常用三种遍历方法
javase-常用三种遍历方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; public ...
- JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- Java中Map的三种遍历方法
Map的三种遍历方法: 1. 使用keySet遍历,while循环: 2. 使用entrySet遍历,while循环: 3. 使用for循环遍历. 告诉您们一个小秘密: (下↓面是测试代码,最爱看 ...
- Jquery中each的三种遍历方法
Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(dat ...
随机推荐
- 暴力+辗转相除法——N个数求和
题目来源 PTA 团体程序设计天梯赛-练习集 L1-009 N个数求和 (20分) https://pintia.cn/problem-sets/994805046380707840/problems ...
- Ubuntu的BEEP去哪里了?
一直知道ubuntu的beep不响应了,但是一直都没太关注过它怎么了. 今天关注了一下,发现网上都是在问怎么关掉它的,时间还是在07年左右. 搜索到了一些帖子,有一些是说没有找到恢复的方法,还有一些, ...
- bash中的if条件语句报错[: missing `]'
这是我的一个小demo #!/bin/bash read -p "请输入3个数:" n1 n2 n3 if [ $n1 -gt $n2 ] && [ $n1 -gt ...
- Burpsuite被动扫描流量转发插件:Passive Scan Client
编译成品:链接: https://pan.baidu.com/s/1E0vsPGgPgB9bXCW-8Yl1gw 提取码: 49eq Passive Scan Client Burpsuite被动扫描 ...
- nmap加载nse脚本在内网渗透中的使用-上
转载自:https://mp.weixin.qq.com/s/zEgHxJEOfaiYVZYmg7NnXA? 大多数情况下,大家都认为nmap只是一个扫描工具,而不把当成是一个渗透工具.nmap集成了 ...
- MySQL基础知识_2
ta表: tb表: MySQL 查询数据 SELECT 列名,列名 FROM 表名 [WHERE Clause] [LIMIT N][ OFFSET M] 查询语句中可以使用一个或者多个表,表之间使用 ...
- hdu3336 Counting the string kmp的next数组的应用
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/3336/ 题意就是要求一个字符串的所有前缀在字符串中出现的次数之和,我们容易想到kmp中的next数组,next[ ...
- 彻底明白equals和hashCode
equals和hashCode方法 equals 我们知道equals是用来比较两个对象是否相等的,比如我们常用的String.equals方法 @Test public void test() { ...
- 使用Docsify做文档网站的详细配置教程
使用Docsify做文档网站的详细配置教程 作者:xhemj 没错,它叫Docsify. xhemj的文档中心就是用这个写的 开源地址:https://github.com/docsifyjs/doc ...
- 使用webhooks进行代码的自动化部署
AutoMaticDeployment---自动部署 项目简介 使用Github的webhooks进行代码的自动化部署 本项目是个人最近搞的一个小工具,自己最近在用hexo部署个人博客(地址:http ...