python 生产者消费者模式

article/2025/9/29 8:17:24

生产者消费者模式概述

在并发编程中使用生产者和消费者模式能够解决大不多的并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。

为什么使用生产者消费者模式

在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题引入了生产者和消费者模式。

什么是生产者消费者模式

生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用通过等待消费者处理,直接扔给阻塞队列,消费者不着生产者拿数据,而是直接从阻塞队列中取,阻塞队列相当于一个缓冲区,平衡了生产者和消费者的处理能力。
在这里插入图片描述

代码案例

import threading
import queue
import time#定义一个生产者
def producer():count = 0#判断队列中任务的数量while q.qsize()<5:print('第%s顿饭......',count)q.put(count)count+=1time.sleep(1)#定义一个消费者
def consumer(name):while True:print("%s 吃了第%s饭" % (name,q.get()))#定义一个队列
q = queue.Queue(maxsize=4)t1 = threading.Thread(target=producer)
t2 = threading.Thread(target=consumer,args=('jibu',))
t1.start()
t2.start()结果:%s顿饭...... 0
jibu 吃了第0饭
第%s顿饭...... 1
jibu 吃了第1饭
第%s顿饭...... 2
jibu 吃了第2饭
第%s顿饭...... 3
jibu 吃了第3饭
第%s顿饭...... 4
jibu 吃了第4饭
第%s顿饭...... 5
jibu 吃了第5饭
第%s顿饭...... 6
jibu 吃了第6饭
第%s顿饭...... 7
jibu 吃了第7饭
第%s顿饭...... 8# 另外,如果供大于求或者求大于供,可以在相对小的一方在增加线程的数量

当然如果需要进一步优化可以让消费者执行完队列中所有任务的时候告诉生产者一声

import threading
import queue
import time#定义一个生产者
def producer():count = 0#判断队列中任务的数量for i in range(5):print('第%s顿饭......',count)q.put(count)count+=1time.sleep(1)q.join()#定义一个消费者
def consumer(name):while True:print("%s 吃了第%s饭" % (name,q.get()))q.task_done()print('消费者执行完了所有任务')#定义一个队列
q = queue.Queue(maxsize=4)t1 = threading.Thread(target=producer)
t2 = threading.Thread(target=consumer,args=('jibu',))
t1.start()
t2.start()结果
第0顿饭......
jibu 吃了第0饭
消费者执行完了所有任务
第1顿饭......
jibu 吃了第1饭
消费者执行完了所有任务
第2顿饭......
jibu 吃了第2饭
消费者执行完了所有任务
第3顿饭......
jibu 吃了第3饭
消费者执行完了所有任务
第4顿饭......
jibu 吃了第4饭
消费者执行完了所有任务

结论:
生产者消费者的2个主要作用
1.程序的解耦合
2.程序的异步执行,提高了程序的运行效率(在排队的时候可以做别的事,过一会可以回来拿这个结果)


http://chatgpt.dhexx.cn/article/45h7BDwB.shtml

相关文章

生产者-消费者模式

概述 生产者-消费者模式在系统交互方面,有几个特点: 1、系统解耦 2、解决并发问题 3、不需要关心对方系统何时处理数据,处理结果如何 下面用几个简单例子逐步说明。 简单例子 假设有两个系统,A系统和B系统,B系统需要依赖A系统产生的数据,也就是说,A系统产生数据后,必须把数…

生产者消费者模式及简单的运用场景

先考虑一个问题&#xff1a;服务端接受多个客户端提交的视频文件进行转码的操作&#xff0c;应该怎么设计&#xff1f; 由于转码比较花费时间&#xff0c;所以我们排除同步的想法。而转码需要用到的外部软件&#xff08;exe文件&#xff09;&#xff0c;不能同时被多个线程用到…

Java多线程系列—生产者消费者模式的多种实现(04)

生产者消费者模式 我们先来看看什么是生产者消费者模式,生产者消费者模式是程序设计中非常常见的一种设计模式,被广泛运用在解耦、消息队列等场景。 在现实世界中,我们把生产商品的一方称为生产者,把消费商品的一方称为消费者,有时生产者的生产速度特别快,但消费者的消…

生产者消费者模式的Java实现

一.概述 1. 什么是“生产者消费者模式”&#xff1f; 生产线程负责生产&#xff0c;消费线程负责消费 生产线程和消费线程要达到均衡。 生产满了就不能继续生产了&#xff0c;必须让消费线程进行消费 消费完了就不能再消费了&#xff0c;必须让生产线程进行生产 这是一种特殊的…

实现生产者消费者模式的三种方式

什么是生产者消费者模式 简单来说&#xff0c;生产者消费者模式就是缓冲区。 那么这么做有两个好处&#xff0c;一个是解耦&#xff0c;第二个是平衡生产能力和消费能力的差&#xff0c;因为生产者和消费者的速度是不一样的&#xff0c;有了这个缓冲区就可以平衡这样一个落差&…

生产者消费者模式最佳实践

测试环境&#xff1a;ubuntu18.04opencv4.2Qt 一个生产者-消费者模式下的视频处理框架。基础结构&#xff1a;视频读取类线程不断读取视频帧&#xff0c;处理类线程对图像进行处理&#xff0c;之后通过信号与槽机制在主线程中显示。特点&#xff1a;视频读取、处理为独立线程&a…

生产者、消费者模式

架构设计&#xff1a;生产者/消费者模式[0]&#xff1a;概述 今天打算来介绍一下“生产者&#xff0f;消费者模式”&#xff0c;这玩意儿在很多开发领域都能派上用场。由于该模式很重要&#xff0c;打算分几个帖子来介绍。今天这个帖子先来扫盲一 把。如果你对这个模式已经比较…

生产者和消费者模式详解

★简介 生产者消费者模式并不是GOF提出的23种设计模式之一&#xff0c;23种设计模式都是建立在面向对象的基础之上的&#xff0c;但其实面向过程的编程中也有很多高效的编程模式&#xff0c;生产者消费者模式便是其中之一&#xff0c;它是我们编程过程中最常用的一种设计模式。…

生产者消费者模式+代码实现

在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。 为什么要使用生产者和消费者模式 在线程世界里&#xff0c;生产者就是生产数据的线程&#xff0c;消费者就是消费数据的线程。在…

生产者消费者模式详解(转载)

★简介 在实际的软件开发过程中&#xff0c;经常会碰到如下场景&#xff1a;某个模块负责产生数据&#xff0c;这些数据由另一个模块来负责处理&#xff08;此处的模块是广义的&#xff0c;可以是类、函数、线程、进程等&#xff09;。产生数据的模块&#xff0c;就形象地称为生…

多线程之生产者消费者模式

文章目录 基本组成阻塞队列有界队列与无界队列ArrayBlockingQueueLinkedBlockingQueueSynchronousQueue 流量控制与信号量(Semaphore)双缓冲与Exchanger 基本组成 生产者&#xff1a;生产者的任务是生产产品&#xff0c;产品可以是数据&#xff0c;也可以是任务。(将产品存入传…

java 生产者消费者模式

java的生产者消费者模式&#xff0c;有三个部分组成&#xff0c;一个是生产者&#xff0c;一个是消费者&#xff0c;一个是缓存。 这么做有什么好处呢&#xff1f; 1.解耦(去依赖)&#xff0c;如果是消费者直接调用生产者&#xff0c;那如果生产者的代码变动了&#xff0c;消费…

生产者消费者模式浅析

由于最近工作中&#xff0c;涉及到生产者消费者设计模式&#xff0c;对此有一些体会&#xff0c;所以总结一下&#xff0c;与大家分享。 什么是生产者消费者模式 在工作中&#xff0c;大家可能会碰到这样一种情况&#xff1a;某个模块负责产生数据&#xff0c;这些数据由另一个…

java实现生产者消费者模式

一: 什么是生产者消费者模型 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯&#xff0c;而通过阻塞队列来进行通讯&#xff0c;所以生产者生产完数据之后不用等待消费者处理&#xff0c;直接扔给阻塞队列&#xff0c;消费…

【Java】生产者消费者模式的实现

前言 生产者消费者问题是线程模型中的经典问题&#xff1a;生产者和消费者在同一时间段内共用同一存储空间&#xff0c;生产者向空间里生产数据&#xff0c;而消费者取走数据。 阻塞队列就相当于一个缓冲区&#xff0c;平衡了生产者和消费者的处理能力。这个阻塞队列就是用来…

生产者/消费者模式

[0]&#xff1a;概述 今天打算来介绍一下“生产者&#xff0f;消费者模式”&#xff0c;这玩意儿在很多开发领域都能派上用场。由于该模式很重要&#xff0c;打算分几个帖子来介绍。今天这个帖子先来扫盲一把。如果你对这个模式已经比较了解&#xff0c;请跳过本扫盲帖&#x…

(四)生产者消费者模式

&#xff08;一)生产者消费者模式原理&#xff1a; 在一个系统中&#xff0c;存在生产者和消费者两种角色&#xff0c;他们通过内存缓冲区进行通信&#xff0c;生产者生产消费者需要的资料&#xff0c;消费者把资料做成产品。生产消费者模式如下图&#xff1a; &#xff08;二…

【C++】【设计模式之】生产者-消费者模型(理论讲解及实现)

一、什么是生产者-消费者模型 1、简单理解生产者-消费者模型 假设有两个进程&#xff08;或线程&#xff09;A、B和一个固定大小的缓冲区&#xff0c;A进程生产数据放入缓冲区&#xff0c;B进程从缓冲区中取出数据进行计算&#xff0c;这就是一个简单的生产者-消费者模型。这里…

设计模式——生产者消费者模式

1 基本概括 2 主要介绍 2.1 概念 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯&#xff0c;而通过阻塞队列来进行通讯&#xff0c;所以生产者生产完数据之后不用等待消费者处理&#xff0c;直接扔给阻塞队列&#xff…

生产者消费者模式三种实现方式

目录 1.什么是生产者消费者模式&#xff1a;2.生产者消费者模型的实现&#xff1a;第一种&#xff1a;使用 synchronized和wait、notify第二种&#xff1a;使用 Lock和await、signal第三种&#xff1a;使用 阻塞队列 BlockingQueue 1.什么是生产者消费者模式&#xff1a; 生产…