【学习心得】Python中的queue模块使用
一、Queue模块的知识点思维导图

二、Queue模块常用函数介绍
queue模块是内置的,不需要安装直接导入就可以了。
(1)创建一个Queue对象
import queue# 创建一个队列实例
q = queue.Queue(maxsize=20) # 可选参数,默认为无限大
(2)入队
# 导入Python标准库中的queue模块,该模块提供了线程安全的队列数据结构
import queue# 创建一个Queue对象,可以理解为初始化一个队列,参数maxsize默认为0,表示队列大小无限制
q = queue.Queue()# 使用for循环将数字0到9依次放入队列中
# put方法用于将元素放入队列尾部,即执行入队操作
for i in range(10):q.put(i) # 这里每执行一次,就将i(0-9)作为一个元素放入队列中# 此时,队列q中按照先进先出(FIFO)原则存储了数字0-9
(3)出队
# 导入Python内置的queue模块,其中包含线程安全的队列数据结构
import queue# 创建一个Queue对象,即初始化一个空队列
q = queue.Queue()# 使用for循环将0到9这10个整数依次入队
# put方法将元素添加到队列的末尾
for i in range(10):q.put(i) # 每次循环都将i作为元素放入队列中
(4)判空
# 导入Python内置的queue模块,其中包含线程安全的队列数据结构
import queue# 创建一个Queue对象,即初始化一个空队列
q = queue.Queue()# 使用for循环将0到9这10个整数依次入队
# put方法将元素添加到队列的末尾
for i in range(10):q.put(i) # 每次循环都将i作为元素放入队列中# 使用while循环检查队列是否为空
# 当队列不为空时,持续执行循环体内的操作
while not q.empty(): # 使用get方法从队列中取出并移除一个元素# 默认情况下,get方法会阻塞直到有元素可用(除非设置了非阻塞模式)data = q.get() # 打印从队列中取出的元素print(data)# 当队列为空时,while循环结束
# 此时所有之前入队的整数0-9会被按照先进先出(FIFO)的原则依次出队并打印
(5)判满
import queue# 初始化一个容量为5的队列
q = queue.Queue(maxsize=5)# 入队操作
for i in range(10):# 在入队前检查队列是否已满if q.full():print("Queue is full, cannot insert more items.")else:q.put(i)# 若队列已满,可以选择等待一段时间后重试或其他处理策略if q.full():time.sleep(1) # 假设休眠一秒后重试continuewhile not q.empty():data = q.get()print(data)
(6)获取队列长度
import queue# 创建一个队列
q = queue.Queue()# 将10个元素放入队列
for i in range(10):q.put(i)# 打印队列长度
print(f"Queue size before processing: {q.qsize()}")# 处理队列中的元素,同时打印队列长度
while not q.empty():data = q.get()print(f"Processing element: {data}, current queue size: {q.qsize()}")# 在处理过程中,每次从队列中取出一个元素后,队列长度都会减一
(7)task_done() 和 unfinished_tasks
import queue
import threading# 创建一个队列
q = queue.Queue()# 生产者线程将任务放入队列
def producer():for i in range(10):q.put(i)print(f"Producer added task: {i}")# 消费者线程从队列中取出并处理任务
def consumer():while True:task = q.get() # 获取任务print(f"Consumer started working on task: {task}")# 这里模拟任务处理过程# 实际应用中,此处应替换为实际的任务处理逻辑process_task(task)# 任务处理完毕,调用 task_done()q.task_done()print(f"Consumer finished task: {task}")# 检查队列是否为空且所有任务都已经完成if q.empty() and q.unfinished_tasks == 0:print("All tasks completed, exiting consumer.")break# 创建并启动生产者线程
p = threading.Thread(target=producer)
p.start()
p.join() # 确保生产者线程完成任务# 创建并启动消费者线程
c = threading.Thread(target=consumer)
c.start()
c.join() # 等待消费者线程处理完所有任务并退出# 由于消费者线程在所有任务完成后退出,所以在此处不需要再次检查队列状态
(8)join
import queue
import threading# 创建一个队列
q = queue.Queue()# 生产者线程将任务放入队列
def producer():for i in range(10):q.put(i)print("Producer has added all tasks.")# 消费者线程从队列中取出并处理任务
def consumer():while True:task = q.get() # 获取任务print(f"Consumer started working on task: {task}")# 这里模拟任务处理过程# 实际应用中,此处应替换为实际的任务处理逻辑process_task(task)# 任务处理完毕,调用 task_done()q.task_done()print(f"Consumer finished task: {task}")# 检查队列是否为空if q.empty():print("No more tasks in the queue.")break# 创建并启动生产者线程
p = threading.Thread(target=producer)
p.start()
p.join() # 确保生产者线程完成任务添加# 创建并启动消费者线程
c = threading.Thread(target=consumer)
c.start()# 主线程等待所有任务完成
q.join() # 阻塞主线程,直到所有从队列中取出的任务都被标记为完成print("All tasks have been processed and marked as done.")
相关文章:
【学习心得】Python中的queue模块使用
一、Queue模块的知识点思维导图 二、Queue模块常用函数介绍 queue模块是内置的,不需要安装直接导入就可以了。 (1)创建一个Queue对象 import queue# 创建一个队列实例 q queue.Queue(maxsize20) # 可选参数,默认为无限大&am…...
ubuntu-server部署hive-part4-部署hive
参照 https://blog.csdn.net/qq_41946216/article/details/134345137 操作系统版本:ubuntu-server-22.04.3 虚拟机:virtualbox7.0 部署hive 下载上传 下载地址 http://archive.apache.org/dist/hive/ apache-hive-3.1.3-bin.tar.gz 以root用户上传至…...
贪心算法|135.分发糖果
力扣题目链接 class Solution { public:int candy(vector<int>& ratings) {vector<int> candyVec(ratings.size(), 1);// 从前向后for (int i 1; i < ratings.size(); i) {if (ratings[i] > ratings[i - 1]) candyVec[i] candyVec[i - 1] 1;}// 从后…...
c# wpf template itemtemplate+ListBox
1.概要 2.代码 <Window x:Class"WpfApp2.Window7"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend/…...
关于JVM-三色标记算法剖析
相关系列 深入理解JVM垃圾收集器-CSDN博客 深入理解JVM垃圾收集算法-CSDN博客 深入理解jvm执行引擎-CSDN博客 jvm优化原则-CSDN博客 jvm流程图-CSDN博客 三色标记产生的原因? 在并发标记的过程中,因为标记期间应用线程还在继续跑,对象间的引…...
怎么看有没有装python
windows系统,运行——cmd,进入dos窗口,输入python,安装成功的话可以看到版本信息并进入编程模式。 如下图(我安装的版本是python 3.5.1):...
VS CODE环境安装和hello world
SAP UI5 demo walkthrough tutorial step1 hello word 首先要安装nodejs,然后才能执行下面的操作 nodejs vscode 安装ui5 npm install --global ui5/cli报错解决: idealTree:npm: sill idealTree buildDeps 这个信息说明npm正在构建,如一直停留在这个…...
mysql性能索引调优易混点总结
文章目录 一、 前言二、explain相关三、索引优化相关联合索引索引下推排序和分组相关优化分页优化表关联优化嵌套循环连接 Nested-Loop Join(NLJ) 算法in和exsits优化 一、 前言 近几年看了很多和mysql相关的书,文章或视频,但仍然有一些点,看…...
区块链与数字身份:探索Facebook的新尝试
在数字化时代,随着区块链技术的崛起,数字身份成为了一个备受关注的话题。作为全球最大的社交媒体平台之一,Facebook一直在探索如何利用区块链技术来改善数字身份管理和用户数据安全。本文将深入探讨Facebook在这一领域的新尝试,探…...
【pycharm】在debug循环时,如何快速debug到指定循环次数
【pycharm】在debug循环时,如何快速debug到指定循环次数 【先赞后看养成习惯】求关注收藏点赞😀 在 PyCharm 中,可以使用条件断点来实现在特定循环次数后停止调试。这可以通过在断点处右键单击,然后选择 “Add Breakpoint” -&g…...
【蓝桥杯每日一题】4.8 公约数
题目来源: 4199. 公约数 - AcWing题库 问题描述: 找到最大整数x,需满足下面两个条件 x x x是 a a a, b b b的公约数 l < x < r l<x<r l<x<r 思路: 找到 a a a, b b b两个数的最大公约数 g c g c d (…...
【MySQL学习】MySQL的慢查询日志和错误日志
꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …...
# C++之functional库用法整理
C之functional库用法整理 注:整理一些突然学到的C知识,随时mark一下 例如:忘记的关键字用法,新关键字,新数据结构 C 的function库用法整理 C之functional库用法整理一、functional库的内建仿函数1. 存储和调用函数2. 存…...
查看MySQL版本的方式
文章目录 一、使用cmd输入命令行查看二、在mysql客户端服务器里查询 一、使用cmd输入命令行查看 1、打开 cmd ,输入命令行: mysql --version 2、还是打开cmd,输入命令行:mysql -V (注意了,此时的V是个大写的V) 二、…...
k8s_入门_命令详解
命令详解 kubectl是官方的CLI命令行工具,用于与 apiserver进行通信,将用户在命令行输入的命令,组织并转化为 apiserver能识别的信息,进而实现管理k8s各种资源的一种有效途径 1. 帮助 2. 查看版本信息 3. 查看资源对象等 查看No…...
腾讯、阿里、字节….等大厂都更喜欢什么样的简历?
我985毕业,为什么筛选简历时输给了一个普通一本? 我投了20份简历,为什么没有一个大厂回我? 每次HR收到简历就没下文了,是我的简历有问题吗? 诚然,在求职时,简历往往就是我们给予H…...
OpenHarmony实战:帆移植案例(中)
OpenHarmony实战:帆移植案例(上) Audio服务介绍 服务节点 基于ADM框架的audio驱动对HDI层提供三个服务hdf_audio_render、hdf_audio_capture、hdf_audio_control。 开发板audio驱动服务节点如下: console:/dev # ls -al hdf_au…...
武汉星起航:创始人张振邦智慧领航,孵化伙伴共绘跨境新蓝图!
在风起云涌的跨境电商行业中,武汉星起航电子商务有限公司如同一颗璀璨的明星,引领着众多创业者迈向成功的彼岸。而这一切的背后,都离不开公司创始人张振邦先生的卓越领导与深厚经验。他凭借着在电子商务行业多年的深耕与积累,为武…...
上下收缩、折叠面板
效果: 上下收缩、折叠面板,类似QQ好友列表那种。原理就是在一个布局中,通过button来实现一个独立widget的visible/disable 实现: 1.分组按钮 #ifndef EXPANDPANEL_H #define EXPANDPANEL_H#include <QWidget>class…...
XC7A35T-2FGG484 嵌入式FPGA现场可编程门阵列 Xilinx
XC7A35T-2FGG484 是一款由Xilinx(赛灵思)制造的FPGA(现场可编程门阵列)芯片 以下是XC7A35T-2FGG484 的主要参数: 1. 系列:Artix-7 2. 逻辑单元数量:33280个 3. 工艺技术:28nm 4. …...
实战指南:利用快马ai为django项目生成开箱即用的vscode python开发环境
作为一个长期使用Python开发Django项目的程序员,我深知配置开发环境是个既基础又容易踩坑的环节。最近尝试用InsCode(快马)平台生成配置方案,发现能省去大量重复劳动。下面分享我的实战经验: 项目结构规范化 平台生成的Django项目骨架严格遵循…...
JeecgBoot启动配置
一、引入maven指定自己的maven仓库 二、指定JDK 记得apply!!!!然后OK 三、配置MySQL数据库(尽量≥5.7版本) 四、运行db文件夹下的SQL文件 五、后端本地环境(application-dev.yml)指定好数据源 1、M…...
linux系统中简单统计java项目代码行数信息
新建脚本文件(最好在项目根目录下):count_java.shvi count_java.sh编辑内容:按一下键盘上的i键,屏幕左下角会出现 -- INSERT --,输入一下内容: #!/bin/bash find . -name "*.java" -p…...
使用Image - To - image条件生成对抗网络评估乳腺癌新辅助化疗反应的动态对比增强MRI血管渗透性映射
论文总结1、提出了一种基于条件生成对抗网络(cGAN)的新方法,用于将动态对比增强磁共振成像(DCE MRI)快速转换为药代动力学(PK)血管通透性参数图(Ktrans),以早…...
Odoo 19成本核算避坑指南:标准成本法下差异分析、委外加工汇率风险与WIP分录丢失问题
Odoo 19成本核算实战避坑指南:标准成本差异、委外加工与WIP分录的深度解决方案 在制造业数字化转型浪潮中,Odoo 19作为开源ERP的领军者,其制造与会计模块的深度集成能力备受企业青睐。然而,当我们真正将系统投入生产环境时&#x…...
K8s中pod的创建与销毁
刚开始学习,整了一下流程图1.pod的创建2.pod的销毁有不对的地方,大家共同探讨...
Snes9x音频系统深度探索:Blargg SPC库如何实现高保真声音模拟
Snes9x音频系统深度探索:Blargg SPC库如何实现高保真声音模拟 【免费下载链接】snes9x Snes9x - Portable Super Nintendo Entertainment System (TM) emulator 项目地址: https://gitcode.com/gh_mirrors/sn/snes9x Snes9x作为一款经典的Super Nintendo Ent…...
ESLint-Plugin-Unicorn规则优先级设置终极指南:如何平衡代码质量和开发效率
ESLint-Plugin-Unicorn规则优先级设置终极指南:如何平衡代码质量和开发效率 【免费下载链接】eslint-plugin-unicorn More than 100 powerful ESLint rules 项目地址: https://gitcode.com/gh_mirrors/es/eslint-plugin-unicorn ESLint-Plugin-Unicorn是一个…...
PakePlus云打包入门指南:从零到一的GitHub Token配置与安全实践
PakePlus云打包入门指南:从零到一的GitHub Token配置与安全实践 【免费下载链接】PakePlus Turn any webpage/HTML/Vue/React and so on into desktop and mobile app under 5M with easy in few minutes. 轻松将任意网站/HTML/Vue/React等项目构建为轻量级(小于5M)…...
Janus-Pro-7B开发者案例:基于Gradio API构建私有AI内容中台
Janus-Pro-7B开发者案例:基于Gradio API构建私有AI内容中台 1. 项目概述 Janus-Pro-7B是DeepSeek发布的一款统一多模态理解与生成模型,它通过创新的架构设计解决了传统模型在理解与生成任务上的冲突问题。该模型支持图像问答、OCR识别、图表分析等理解…...
