Python 线程队列 Queue – FIFO - Python零基础入门教程

目录

  • 一.Python 线程队列分类
  • 二.Python 线程先进先出队列 Queue 简介
  • 三.Python 线程先进先出队列 Queue 常用函数
  • 四.Python 线程先进先出队列 Queue 使用
  • 五.猜你喜欢

零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门

之前的文章中讲解很多关于线程间通信的知识,比如:线程互斥锁 lock线程事件 event线程条件变量 condition 等等,这些都是在开发中经常使用的内容,而今天继续给大家讲解一个更重要的知识点 — 线程队列 queue

一.Python 线程队列分类

  • 1.线程队列 Queue — FIFO(先进先出队列)****,即哪个数据先存入,取数据的时候先取哪个数据,同生活中的排队买东西
  • 2.线程队列 LifoQueue — LIFO(先进后出队列)****,即哪个数据最后存入的,取数据的时候先取,同生活中手枪的弹夹,子弹最后放入的先打出
  • 3.线程队列 PriorityQueue — PriorityQueue(优先级队列)****,即存入数据时候加入一个优先级,取数据的时候优先级最高的取出

今天只对第一种普通线程队列 Queue(FIFO) 讲解,后面的两种留到下一篇文章在做详细讲解!

二.Python 线程先进先出队列 Queue 简介

线程队列 Queue,也称 FIFO,存在队列中的数据先进先出,就好比拉肚子,吃什么拉什么~~呃呃,有点重口味,如下图:

举个形象的例子:如果把 123456 这 6 个数字,依次放入队列 queue 中,那么我们重队列中取数据的时候,取到的第一个数据必然是 1 ,第二个数据必然是 2 ,依次类推,这就是所谓的吃什么拉什么 — FIFO (先进先出);

三.Python 线程先进先出队列 Queue 常用函数

  • **Queue.qsize —**返回队列大小

  • **Queue.empty —**判断队列是否为空

  • **Queue.full —**判断队列是否满了

  • Queue.get([block[,timeout]])从队列头删除并返回一个 item ,block 默认为 True ,表示当队列为空却去 get 的时候会阻塞线程,等待直到有有 item 出现为止来 get 出这个 item 。如果是 False 的话表明当队列为空你却去 get 的时候,会引发异常。在 block 为 True 的情况下可以再设置 timeout 参数。表示当队列为空,get 阻塞 timeout 指定的秒数之后还没有 get 到的话就引发 Full 异常。

  • Queue.task_done —从场景上来说,处理完一个 get 出来的 item 之后,调用 task_done 将向队列发出一个信号,表示本任务已经完成(与 Queue.get 配对使用)。

  • Queue.put(…[,block[,timeout]])向队尾插入一个 item ,同样若 block=True 的话队列满时就阻塞等待有空位出来再 put ,block=False 时引发异常。同 get 的 timeout,put 的 timeout 是在 block 为 True 的时候进行超时设置的参数。

  • **Queue.join —**监视所有 item 并阻塞主线程,直到所有 item 都调用了 task_done 之后主线程才继续向下执行。这么做的好处在于,假如一个线程开始处理最后一个任务,它从任务队列中拿走最后一个任务,此时任务队列就空了但最后那个线程还没处理完。当调用了 join 之后,主线程就不会因为队列空了而擅自结束,而是等待最后那个线程处理完成了。

四.Python 线程先进先出队列 Queue 使用

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 线程先进先出队列Queue.py
@Time:2021/05/04 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""import threading
import queueq = queue.Queue(5)  # 长度,队列中最多存放5个数据def put():for i in range(20):q.put(i)print("数字%d存入队列成功" % i)q.join()  # 阻塞进程,直到所有任务完成,取多少次数据task_done多少次才行,否则最后的ok无法打印print('ok')def get():for i in range(20):value = q.get()print("数字%d重队列中取出" % value)q.task_done()  # 必须每取走一个数据,发一个信号给join# q.task_done()   #放在这没用,因为join实际上是一个计数器,put了多少个数据,# 计数器就是多少,每task_done一次,计数器减1,直到为0才继续执行t1 = threading.Thread(target=put, args=())
t1.start()
t2 = threading.Thread(target=get, args=())
t2.start()'''
输出结果:数字0存入队列成功
数字1存入队列成功
数字2存入队列成功
数字3存入队列成功
数字4存入队列成功
数字0重队列中取出
数字1重队列中取出
数字2重队列中取出
数字3重队列中取出
数字4重队列中取出
数字5存入队列成功
数字6存入队列成功
数字7存入队列成功
数字8存入队列成功
数字9存入队列成功
数字5重队列中取出
数字6重队列中取出
数字7重队列中取出
数字8重队列中取出
数字9重队列中取出
数字10存入队列成功
数字11存入队列成功
数字12存入队列成功
数字13存入队列成功
数字14存入队列成功
数字10重队列中取出
数字11重队列中取出
数字12重队列中取出
数字15存入队列成功
数字16存入队列成功
数字17存入队列成功
数字13重队列中取出
数字14重队列中取出
数字15重队列中取出
数字16重队列中取出
数字18存入队列成功
数字19存入队列成功
数字17重队列中取出
数字18重队列中取出
数字19重队列中取出
ok
'''

五.猜你喜欢

  1. Python 条件推导式
  2. Python 列表推导式
  3. Python 字典推导式
  4. Python 函数声明和调用
  5. Python 不定长参数 *argc/**kargcs
  6. Python 匿名函数 lambda
  7. Python return 逻辑判断表达式
  8. Python 字符串/列表/元组/字典之间的相互转换
  9. Python 局部变量和全局变量
  10. Python type 函数和 isinstance 函数区别
  11. Python is 和 == 区别
  12. Python 可变数据类型和不可变数据类型
  13. Python 浅拷贝和深拷贝
  14. Python 文件读写操作
  15. Python 异常处理
  16. Python 模块 import
  17. Python __name__ == ‘__main__’详细解释
  18. Python 线程创建和传参
  19. Python 线程互斥锁 Lock
  20. Python 线程时间 Event
  21. Python 线程条件变量 Condition
  22. Python 线程定时器 Timer
  23. Python 线程信号量 Semaphore
  24. Python 线程障碍对象 Barrier
  25. Python 线程队列 Queue – FIFO
  26. Python 线程队列 LifoQueue – LIFO
  27. Python 线程优先队列 PriorityQueue

未经允许不得转载:猿说编程 » Python 线程队列 Queue – FIFO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BugkuCTF-WEB题网站被黑

利用御剑扫描后台或者通过dirsearch扫描一下目录看看 得到http://1147.67.246.176:15607/shell.php 打开这个网址 发现需要登录密码 通过Burp添加字典爆破密码为hack 输入得到flag

IBM 收购 RedHat(红帽)!340 亿美元

IBM今天宣布了以高达340亿美元的价格收购Red Hat,这笔交易在开源软件行业和云计算行业势必都会引起地震。Red Hat是将开源软件商业化的先驱之一,其采用的模式是,代码免费提供给其他公司使用,以便重新分发和修改。开源软件已逐渐成…

Python 线程队列 LifoQueue – LIFO - Python零基础入门教程

目录 一.Python 线程队列 Queue 分类二.Python 线程先进后出队列 LifoQueue 简介三.Python 线程先进后出队列 LifoQueue 函数介绍四.Python 线程先进后出队列 LifoQueue 使用五.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 Python 线…

BugkuCTF-WEB题本地管理员

基础知识: base64: 是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一类基于64个可打印字符来表示二进制数据的方法。 XFF伪造请求头: X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的…

你最关心的马蜂窝事件舆论全景图在这里,用文本挖掘一挖到底

原创作者:谭婧,苏格兰折耳喵企业作为社会基本的细胞,在守法盈利的同时,担负着服务消费者、社区、社会等利益相关方的重要责任。互联网企业是互联网时代的宠儿,举手投足备受关注。所谓成也萧何,败也萧何。大…

Kafka日志

位置 server.properties配置文件中通过log.dir指定日志存储目录 log.dir/{topic}-{partition} 核心文件 .log 存储消息的日志文件,固定大小为1G,写满后会新增一个文件,文件名表示当前日志文件记录的第一条消息的偏移量。 .index 以偏移…

BugkuCTF-WEB题源码

根据提示 查看源码 有URL编码 解码并将其拼接 有一个假flag提交 得到真flag

Cloud一分钟 | 14万中国人基因大数据是否外泄?运营商发展大数据优势何在?

Hello,everyone:10月30日早,星期二,祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云计算学习…

BugkuCTF-Reverse题easy-100(LCTF)

下载附件,得到apk文件 一道安卓逆向题,JEB反编译,查看 MainActivity 分析可得,主函数会先执行 p 函数,创建了一个按钮监听事件在 classs d 里,class d 里的 onclick 函数,当我们点击安卓的按钮…

Cloud一分钟 | 成本大增致谷歌财报蒙尘;Gartner发数据库魔力象限:阿里云成为黑马...

Hello,everyone:10月31日早,星期三,祝大家万圣节快乐!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云计算学…

Python实现AES加密进行PKCS5Padding的填充

Python实现AES加密进行PKCS5Padding的填充 (1)Python 需要导入的模块 (2)AES加密代码 (3)AES解密代码 (4)测试代码 (5)测试结果

Cloud一分钟 | 马云发表致股东的公开信;5G算什么?中国已着手研究6G相关工作...

Hello,everyone:11月01日早,星期四,新的一天祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云…

BugkuCTF-Reverse题First_Mobile(xman)

知识点 1.getByte() 功能:返回字符的ascii码值 2.equals() 功能:用于将字符串与指定的对象比较。 结果:相等时返回true,反之返回false 下载apk文件 使用jeb3打开反编译代码 分析,程序将editText里的内容进行一次encode.check检…

马云、张小龙、雷军缅怀金庸:江湖路远,侠义长存!

金庸走了!这个秋天,我们告别了太多公众人物。有网友说,“切切实实地感受到,一个时代过去了”。而成年的我们,注定要面临更多的失去。然而,一代兴起,一代离开,又是一种必然。斯人已去…

BugkuCTF-Reverse题LoopAndLoop(阿里CTF)

下载apk文件 先解压安装下看看什么情况 打开文件,得到一个LoopAndLoop的apk,打开进去,让输密码,点击按钮,可以看到Not Right!或者Not a valid integer number的提示,显然,只要找到密码,找到flag…

Cloud一分钟 | 腾讯打造云启商学院,马化腾将担任荣誉院长;阿里巴巴:2018财年云计算收入同比增长101%...

Hello,everyone:11月02日早,星期五,新的一天祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云…

BugkuCTF-Crypto题easy_crypto

下载文件file.zip 解压得到010.txt 打开为摩尔斯电码 通过ctf.ssleye.com/morse.html解码 得到flag%u7bm0rse_code_1s_interest1n9!%u7d 去掉%u7b与%u7d

GitHub服务中断24小时11分钟事故分析报告

来源 | The GitHub Blog译者 | 无明UTC 时间 10 月 21 日 22:52,为了更换发生故障的 100G 光纤设备,美国东海岸网络中心与美国东海岸数据中心之间的连接被断开。连接在 43 秒后恢复,但这次短暂的中断引发了一系列事故,导致 24 小时…

BugkuCTF-Crypto题MathEnglish

题目hint:口语需要读出来? 下载文件,打开 得到一些数字: 21 33 1 22 3 44 54 5 1 35 54 3 35 41 52 13 出题人给了hint2,让我们往元音上想 然后找到了一篇元音密码的文章 简单替换一下得到flag:bugku{yuanyinpwd}

Cloud一分钟|茅台4.5亿入股云上贵州大数据,后者已接管苹果中国iCloud; 阿里云进入印度市场,增长速度远超当地平均水平...

Hello,everyone:11月05日早,星期一,新的一天祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云…