【学习心得】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大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
