Python生产者消费者模型:队列卡死?别让线程饿到哭

发布时间:2026/11/4 14:42:33

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/11/4 3:00:58

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

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

2026/10/31 12:20:38

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

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

2026/10/30 11:13:33

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

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

2026/11/4 14:42:23

微信开源RAG引擎WeKnora深度拆解:私有文档秒变可问答知识库

最近技术圈里讨论度很高的一件事,就是微信开源了一个知识库项目,社区里不少人都叫它“神级知识库”。我抽空从头到尾过了一遍源码和部署流程,又在自己服务器上跑了一套,发现它并不是标题党——至少在“把私有文档变成可问答的知识…

2026/11/4 14:42:23

2026语音智能体技术趋势与AAAI会议亮点解析

1. 活动背景与行业趋势 2026年人工智能领域最值得关注的交叉点,莫过于语音智能体技术与顶级学术会议的碰撞。作为AAAI 2026的同期活动,MagicHub Meetup选择在新加坡举办首站交流会,折射出三个关键行业信号: 语音交互技术正从实验…

2026/11/4 14:42:23

Supabase数据库查询性能优化实战指南

1. 项目概述 Supabase作为一款开源的Firebase替代方案,近年来在开发者社区中获得了广泛关注。其PostgreSQL数据库的查询性能直接影响着应用的整体响应速度。本文将深入分析Supabase源码中与数据库查询性能相关的关键模块,揭示常见性能瓶颈的成因&#xf…

2026/11/4 14:42:23

AI笔记工具:语音转写与知识图谱构建实践

1. 项目概述 去年11月,谷歌实验室推出NotebookLM这款AI笔记工具时,我就被它的"即时知识蒸馏"功能深深吸引。但受限于网络环境和语言障碍,国内用户使用起来始终不够顺畅。经过三个月的开发和迭代,我们团队终于完成了这个…

2026/11/4 14:42:23

多模态交互技术:架构设计与提示工程实战

1. 多模态交互技术概述 当我们在手机上用语音唤醒智能助手,然后通过手势滑动屏幕查看天气,最后用文字输入补充查询信息时,就已经完成了一次典型的多模态交互。这种融合语音、视觉、触觉等多种输入输出方式的交互形态,正在重塑人机…

2026/11/4 14:37:23

金蝶KIS 10.0升级12.2:账套迁移、备份校验与避坑指南

简介:这份金蝶KIS 10.0至12.2升级文档面向使用金蝶KIS专业版的中小企业财务、业务及信息化实施人员,帮助梳理跨版本升级中的功能变化与注意事项。文档以升级要点和新功能清单为主线,涵盖精度处理、采购建议与计划表、委外加工费用及信用额度、…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 0:03:20

AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年…

2026/11/4 0:03:20

从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你…

2026/11/4 0:03:20

32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/3 14:24:53

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑