发布时间:2026/8/27 11:07:18
Python生产者消费者模型:队列卡死?别让线程饿到哭 摘录核心编程在这个例子当中, 进行生产者 - 消费者模型的演示: 商品或服务的生产者去生产商品, 随后把生产出来的商品放置到类似于队列的那种数据结构里面。生产商品时所花费的时间是无法确定的, 同样的道理, 消费者消费商品的时间也是不能确定的。借助queue模块在.x版本里, 称作Queue来给出线程间通信的机制, 进而使得线程之间能够分享数据。具体是这样, 先创建一个队列, 让生产者线程于其中放置新的商品, 然后消费者线程去消费这些商品。下表是queue模块的部分属性属性描述queue模块的类Queue(0)构建一个会按照先进入的元素先被取出顺序的队列。要是给定了最大值, 那么在队列不存在容纳空间的时候会处于阻塞状态反之不然, 即为没有上限的队列。(0)建造一个后面进入的先出来的队列, 要是给定了最大数值, 那么在队列不存在空间的时候进行阻塞, 要是没给定最大数值, 那么就是无限的序列。(0)创建一个具有优先级的队列, 要是给定了最大值, 那么在队列不存在空间的时候会阻塞, 不然的话, 就是无限序列。queue异常Empty当对空队列调用get*()方法时抛出异常Full当对已满的队列调用put*()方法时抛出异常queue对象方法qsize()让队列大小被返回, 因为在返回队列大小时, 它有可能会被其他线程进行修改, 所以这个值之为近似值。empty()如果队列为空则返回True否则返回Falsefull()如果队列已满则返回True否则返回Falseput(item,blockTrue,None)将物品放进队列之中。要是阻塞设置为真此为默认情形, 并且其值为无, 那么在可用空间出现以前是阻塞的状态若是其值为正, 那么最多阻塞相应的秒数要是阻塞设置为假, 进而会抛出为空异常。(item)和put(item,False)效果相同get(blockTrue,None)从队列那儿拿来元素嗯, 如果给出了那样不是0值的block, 那就一直处于阻塞状态直至有可被利用的元素到达为止。()和get(False)效果想用()作为用来表明队列里的某一个元素已经做完执行, 此方法会获取下面的join()采用。join()在队列中所有元素执行完毕并调用上面的()信号前保持阻塞。下面的.py脚本里, 运用queue对象达成了生产者 - 消费者场景, 它能够随机地进行商品生产或者消费, 并且生产者以及消费者是互相独立的, 以并发方式执行线程。留意, 此处运用了在之前章节里改写而成的类。#python 3.6fromrandomimportrandintfromtimeimportsleepfromqueueimportQueuefrommyThreadimportMyThread#将一个对象放入队列中defwriteQ(queue):print(正在为队列生产………) queue.put(商品,1)print(当前商品总数,queue.qsize())#消费队列中的一个对象defreadQ(queue): val queue.get(1)print(正在从队列中消费商品……消费后还剩余商品,queue.qsize())#模仿生产者。defwriter(queue,loops):foriinrange(loops): writeQ(queue) sleep(randint(1,3))#writer的睡眠时间一般比reader短是为了阻碍 reader从空队列中获取对象换句话说就是使得轮到reader执行时已存在可消费对象的可能性更大。#模仿消费者defreader(queue,loops):foriinrange(loops): readQ(queue) sleep(randint(2,5)) funcs[writer,reader] nfuncsrange(len(funcs))defmain(): nloops randint(2,5)#randint 和randrange类似区别在于randrange是半开半闭区间而randint是闭区间q Queue(32) threads []#模拟线程池foriinnfuncs: t MyThread(funcs[i],(q,nloops),funcs[i].__name__)#创建线程threads.append(t)foriinnfuncs: threads[i].start()#开始执行线程foriinnfuncs: threads[i].join()print(结束)if__name____main__: main()执行效果类似PS C:\Users\WC python E:\Python3.6.3\workspace\prodcons.py 开始执行 writer 在 Thu Apr 19 21:06:22 2018 正在为队列生产……… 开始执行 reader 在 Thu Apr 19 21:06:22 2018 当前商品总数 1 正在从队列中消费商品……消费后还剩余商品 0 正在为队列生产……… 当前商品总数 1 正在从队列中消费商品……消费后还剩余商品 0 正在为队列生产……… 当前商品总数 1 正在从队列中消费商品……消费后还剩余商品 0 正在为队列生产……… 当前商品总数 1 正在为队列生产……… 当前商品总数 2 writer 结束于 Thu Apr 19 21:06:30 2018 正在从队列中消费商品……消费后还剩余商品 1 正在从队列中消费商品……消费后还剩余商品 0 reader 结束于 Thu Apr 19 21:06:39 2018 结束

相关新闻

2026/8/27 11:02:18

C++模板元编程利器:Boost.callable_traits深度解析与应用实践

1. 项目概述:为什么我们需要callable_traits? 在C的日常开发中,尤其是涉及模板元编程、泛型库设计或者构建回调系统时,我们经常需要“窥探”一个可调用对象(Callable Object)的内部特征。这个可调用对象可能…

2026/8/27 11:02:18

频率可编程窄带发射机实战:从PLL配置到频谱调试

做无线表计和物联网节点的同学应该都有体会:射频发射这一环,看起来只是把数据发出去,真正较真的全是细节。我最近拿到一款新出的频率可编程窄带发射芯片的评估板,把玩了一段时间,也做了不少实测。这块板子的核心卖点就…

2026/8/27 11:02:18

AI Enhancement:从提示词优化到输出治理的工程化落地

今天聊一个看起来很“口号”的词: AI Enhancement 。我第一次看到 Adima AI 这个名字和它的定位时,第一反应是“增强”到底是什么意思?是把模型变得更强?还是把生成结果修得更好?后来我意识到,这不是一个…

2026/8/27 11:47:33

数学建模B题破题逻辑:动态协同优化与分阶段建模方法

1. 这道B题到底在考什么:从赛题文本到建模本质的穿透式解读 2023年亚太赛APMCM B题刚发布时,我正带着一支跨校队伍在实验室调试一个交通流仿真模型。看到题目PDF第一眼,不是急着翻代码库,而是把整道题干逐字抄在白板上——这不是为…

2026/8/27 11:47:33

MPLAB Harmony开发指南:从MCU固件分层到代码生成实践

最近搜固件开发相关的资料时,热搜词里蹦出来的画风堪称魔幻:一边是 Linux 网卡驱动报 mt7921e: direct firmware load for mediatek/wifi_ram_code_mt7961 失败,一边是模拟器玩家满世界找 MelonDS 的 BIOS7/BIOS9,还有人在 Cube…

2026/8/27 11:47:33

2026黄山工程建筑材料检测排名 TOP5 CMA 资质提供钢材检测、水泥检测、砂石检测 全覆盖联系方式推荐

黄山本地建筑材料检测机构鳞次栉比,市场鱼龙混杂,建筑总包单位、建材生产厂家、市政工程项目、装修建设企业选材验收时,极易遇上无资质机构出具的检测报告无法用于工程报审、竣工验收备案。小编实地走访筛选本地正规第三方建筑材料检测实验室…

2026/8/27 11:47:33

2026黄南工程建筑材料检测排名 TOP5 CMA 资质提供钢材检测、水泥检测、砂石检测 全覆盖联系方式推荐

黄南建材检测机构鳞次栉比,鱼龙混杂。建筑总包单位、建材生产厂家、市政工程项目、装修建设企业选材验收时,极易遇上无资质机构出具的检测报告无法用于工程报审、竣工验收备案。小编实地走访筛选本地正规第三方建筑材料检测实验室,整理优质服…

2026/8/27 11:47:33

Blender电缆管道接口建模全流程:从曲线到白模

相信很多做工程建模、机械设计、建筑可视化的朋友都有这种体会:模型本身不难,难的是电缆、通风管、运输管这类“长条形构件”怎么建得又快又规整,接口处怎么处理才不会穿模,最后导出的白模能不能直接给渲染或者游戏引擎用。 本文…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/27 10:58:22

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/27 7:46:21

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/27 0:01:16

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:01:16

LeetCode Hot100(51-60)算法精解与面试技巧

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

2026/8/27 0:01:16

CRC校验实战:从模2除法到HJ212协议排错

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

2026/8/26 19:34:06

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/26 19:17:08

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/26 19:34:05

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…