iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python生产者与消费者模型中的优势有哪些
  • 406
分享到

Python生产者与消费者模型中的优势有哪些

2023-07-05 16:07:58 406人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“python生产者与消费者模型中的优势有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python生产者与消费者模型中的优势有哪些”文章能帮助大家解决问题。生产者消费者模型具体

这篇文章主要介绍“python生产者与消费者模型中的优势有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python生产者与消费者模型中的优势有哪些”文章能帮助大家解决问题。

生产者消费者模型具体来讲,就是在一个系统中,存在生产者和消费者两种角色,他们通过内存缓冲区进行通信,生产者生产消费者需要的资料,消费者把资料做成产品,从而消耗掉生产的数据。达到供需平衡,不能生产多了浪费,也不能需要消耗资源的时候没有。

multiprocessing-Queue实现

from  multiprocessing import Process,Queue  #多进程组件,队列import time,random  #生产者方法def producer(name,food,q):    for i in  range(4):        time.sleep(random.randint(1,3)) #模拟获取数据时间        f = '%s生产的%s%s'%(name,food,i)        print(f)        q.put(f) #添加进队列#消费者方法def consumer(q,name):    while True:        food = q.get() #如果获取不到,会一直阻塞进程不会结束子进程        # 当队列中的数据是None的时候结束while循环        if food is None:            print('%s获取到一个空'%name)            break        f = '\033[31m%s消费了%s\033[0m' % (name, food)        print(f)        time.sleep(random.randint(1,3)) # 模拟消耗数据时间if __name__ == '__main__':    q = Queue()  # 创建队列    # 模拟生产者 生产数据    p = Process(target=producer, args=('p', '包子', q)) #创建进程    p.start() #启动进程    p1 = Process(target=producer, args=('p1', '烧饼', q))    p1.start()   #模拟消费者消费数据    c = Process(target=consumer, args=(q, 'c'))    c.start()    c1 = Process(target=consumer, args=(q, 'c1'))    c1.start()    p.join()#阻塞主进程 直到p和p1 子进程结束后才执行q.put() 方法    p1.join()#阻塞主进程 直到p和p1 子进程结束后才执行q.put() 方法    #为了确保生产者生产完所有数据后,    #最后一个是None,方便结束子进程中的while循环,    #否则会一直等待队列中加入新数据。    q.put(None)    q.put(None)

使用Queue组件实现的缺点就是,实现了多少个消费者consumer进程,就需要在最后往队列中添加多少个None标识,方便生产完毕结束消费者consumer进程。否则,p.get() 不到任务会阻塞子进程,因为while循环,直到队列q中有新的任务加进来,才会再次执行。而我们的生产者只能生产这么多东西,所以相当于程序卡死。

multiprocessing-JoinableQueue实现

from multiprocessing import JoinableQueue,Processimport time,random#生产者方法def producer(name,food,q):    for i in range(4):        time.sleep(random.randint(1, 2))        f = '%s生产的%s%s'%(name,food,i)        q.put(f)        print(f)    q.join()  #一直阻塞,等待消耗完所有的数据后才释放#消费者方法def consumer(name,q):    while True:        food = q.get()        print('\033[31m%s消费了%s\033[0m' % (name, food))        time.sleep(random.randint(4,8))        q.task_done() #每次消耗减1if __name__ == '__main__':    q = JoinableQueue()  #创建队列    #模拟生产者队列    p1 = Process(target=producer,args=('p1','包子',q))    p1.start()    p2 = Process(target=producer,args=('p2','烧饼',q))    p2.start()    #模拟消费者队列    c1 = Process(target=consumer,args=('c1',q))    c1.daemon = True #守护进程:主进程结束,子进程也会结束    c1.start()    c2 = Process(target=consumer,args=('c2',q))    c2.daemon = True    c2.start()    p1.join() #阻塞主进程,等到p1子进程结束才往下执行    p2.join()    # q.task_done() 每次消耗队列中的 任务数减1    # q.join() 一直阻塞,等待队列中的任务数消耗完才释放    # 因为有 q.join 所有一直会等待 c1,c2 消耗完毕。才会执行 p.join 后面的代码    # 因为 c1 c2 是守护进程,所以到这一步主进程代码执行完毕,主进程会释放死掉,    # 所以 c1 c2 也会跟随 主进程释放死掉。

使用JoinableQueue组件,是因为JoinableQueue中有两个方法:task_done()join() 。首先说join()Process中的join()的效果类似,都是阻塞当前进程,防止当前进程结束。但是JoinableQueuejoin()是和task_down()配合使用的。
Process中的join()是等到子进程中的代码执行完毕,就会执行主进程join()下面的代码。而JoinableQueue中的join()是等到队列中的任务数量为0的时候才会执行q.join()下面的代码,否则会一直阻塞。
task_down()方法是每获取一次队列中的任务,就需要执行一次。直到队列中的任务数为0的时候,就会执行JoinableQueuejoin()后面的方法了。所以生产者生产完所有的数据后,会一直阻塞着。不让p1p2进程结束。等到消费者get()一次数据,就会执行一次task_down()方法,从而队列中的任务数量减1,当数量为0后,执行JoinableQueuejoin()后面代码,从而p1p2进程结束。
因为p1p2添加了join()方法,所以当子进程中的consumer方法执行完后,才会往下执行。从而主进程结束。因为这里把消费者进程c1c2 设置成了守护进程,主进程结束的同时,c1c2 进程也会随之结束,进程都结束了。所以消费者consumer方法也会结束。

关于“Python生产者与消费者模型中的优势有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网Python频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Python生产者与消费者模型中的优势有哪些

本文链接: https://www.lsjlt.com/news/353399.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python生产者与消费者模型中的优势有哪些
    这篇文章主要介绍“Python生产者与消费者模型中的优势有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python生产者与消费者模型中的优势有哪些”文章能帮助大家解决问题。生产者消费者模型具体...
    99+
    2023-07-05
  • Java中的生产者/消费者模型
    一、什么是生产者/消费者模型 生产者-消费者模型(Producer-Consumer problem)是一个非常经典的多线程并发协作的模型。 比如某个模块负责生产数据,而另一个模块负责处理数据。产生数据的模块就形象地被称为生产者;而处理数据...
    99+
    2023-10-05
    java 多线程 wait notify notifyAll
  • 生产者、消费者模型---Queue类
    Queue队列在几乎每种编程语言都会有,python的列表隐藏的一个特点就是一个后进先出(LIFO)队列。而本文所讨论的Queue是python标准库queue中的一个类。它的原理与列表相似,但是先进先出(FIFO)队列。而内部实现更为完...
    99+
    2023-01-30
    生产者 模型 消费者
  • python 的生产者和消费者模式
    目录python 的生产者和消费者模式一、生产者消费者模式概述二、为什么使用生产者消费者模式三、什么是生产者消费者模式四、代码案例1、定义一个生产者2、定义一个消费者3、定义一个队列...
    99+
    2024-04-02
  • python多进程中的生产者和消费者模型怎么实现
    这篇文章主要介绍了python多进程中的生产者和消费者模型怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python多进程中的生产者和消费者模型怎么实现文章都会有所收获,下面我们一起来看看吧。Pytho...
    99+
    2023-07-05
  • Python教程之生产者消费者模式解析
    为什么使用生产者消费者模式 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者...
    99+
    2024-04-02
  • 生产消费者模型中的task_done()如何作用
    这篇文章主要讲解了“生产消费者模型中的task_done()如何作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“生产消费者模型中的task_done()如何作用”吧!tase_done()...
    99+
    2023-07-05
  • PHP实现生产者与消费者的案例
    这篇文章主要介绍PHP实现生产者与消费者的案例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!PHP中使用Kafka需要RdKafka扩展,而RdKafka依赖于librdkafka,所以这两个我们都需要安装,具体安装...
    99+
    2023-06-14
  • 关于生产消费者模型中task_done()的具体作用
    目录直奔主题代码解释对比解释看效果注释掉q.task_done()和q.join()仅注释掉q.task_done()**总结最后直奔主题 tase_done()的作用: 只有消费者...
    99+
    2023-02-25
    生产消费者模型 task_done()的作用 生产消费者
  • 队列的生产者与消费者模式在PHP与MySQL中的实现方法
    随着互联网业务的快速发展,系统中处理大量任务的需求变得越来越迫切。队列是一种常见的解决方案,可以高效地处理任务。队列的生产者-消费者模式(Producer-Consumer Pattern)在PHP和MySQL中的实现方法是一种常见的解决方...
    99+
    2023-10-21
    MySQL 消费者 PHP 队列 生产者
  • Python中怎么利用多线程实现生产者消费者模式
    Python中怎么利用多线程实现生产者消费者模式,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是生产者消费者模式在软件开发的过程中,经常碰到这样的场景:某些模块负责生产数据...
    99+
    2023-06-17
  • Java多线程中的生产者与消费者案例讲解
    这篇文章主要讲解了“Java多线程中的生产者与消费者案例讲解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java多线程中的生产者与消费者案例讲解”吧!目录前言工具知识点设计思路具体步骤总结...
    99+
    2023-06-20
  • Kafka中生产者和消费者指的是什么
    在Kafka中,生产者和消费者是指Kafka消息系统中参与消息传递的两种角色。 生产者是指负责向Kafka集群中的主题(topic)...
    99+
    2024-03-14
    Kafka
  • Go语言如何实现一个简单生产者消费者模型
    这篇文章给大家分享的是有关Go语言如何实现一个简单生产者消费者模型的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、生产者消费者模型生产者消费者模型:某个模块(函数等〉负责产生数据,这些数据由另一个模块来负责处理...
    99+
    2023-06-22
  • SpringBoot整合RabbitMQ, 实现生产者与消费者的功能
    自然,依赖是少不了的。除了spring-boot-starter-web依赖外。 就这个是最主要的依赖了,其他的看着办就是了。我用的是gradle,用maven的看着弄也一样的。无非...
    99+
    2024-04-02
  • Java多线程中消费者生产者模式怎么实现
    这篇文章主要讲解了“Java多线程中消费者生产者模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java多线程中消费者生产者模式怎么实现”吧!  //主类&nb...
    99+
    2023-06-17
  • Java多线程中消费者与生产者的关系是什么
    这篇文章将为大家详细讲解有关Java多线程中消费者与生产者的关系是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  多线程:CPU中各种任务在交替执行过程中,被称为多线程处理。其中,每个任务的一次动态...
    99+
    2023-06-02
  • 怎么在Python中利用 Asyncio模块实现一个生产消费者模型
    本文章向大家介绍怎么在Python中利用 Asyncio模块实现一个生产消费者模型的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Python主要用来做什么Python主要应用于:1、Web开发;2、数...
    99+
    2023-06-06
  • java中的wait()和notify()方法实现生产者消费者模式实例
    这篇文章主要介绍“java中的wait()和notify()方法实现生产者消费者模式实例”,在日常操作中,相信很多人在java中的wait()和notify()方法实现生产者消费者模式实例问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
    99+
    2023-06-20
  • Java实现生产者消费者问题与读者写者问题的示例分析
    这篇文章将为大家详细讲解有关Java实现生产者消费者问题与读者写者问题的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、生产者消费者问题生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它...
    99+
    2023-05-30
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作