python之生产者消费者模型实现详解
作者:bainianminguo 发布时间:2021-12-03 14:37:15
标签:python,生产者,消费者,模型
代码及注释如下
#Auther Bob
#--*--conding:utf-8 --*--
#生产者消费者模型,这里的例子是这样的,有一个厨师在做包子,有一个顾客在吃包子,有一个服务员在储存包子,这个服务员我们就可以用queue来实现
import threading
import queue
import time
'''
def consumer(p,que):
id = que.get()
print("[%s]来吃包子了,我吃到的包子的名字是[%s]" %(p,id))
def prodcer(p,que):
print("[%s]做了2个包子" %(p))
que.put("baozi[1]")
print("baozi[1]做好了")
que.put("baozi[2]")
print("baozi[2]做好了")
if __name__ == '__main__':
que = queue.Queue()
p = threading.Thread(target=prodcer,args=("Bob",que))
c1 = threading.Thread(target=consumer,args=("c1",que))
c2 = threading.Thread(target=consumer, args=("c2", que))
c3 = threading.Thread(target=consumer, args=("c3", que))
p.start()
c1.start()
c2.start()
c3.start()
# p.join()
'''
#上面这个例子,如果没有包子了,但是厨师会不知道,厨师也不会继续做包子,而没有吃到包子的人会一直等待,程序会一直不结束
#我们可以这样做,消费者发现没有包子了,告诉服务员,服务员在告诉厨师,这里我们就会遇到task.down
def consumer(p):
id = que.get()
print("[%s]来吃包子了,我吃到的包子的名字是[%s]" %(p,id))
que.task_done() #如归队列为空了,则会通知que.join,que.join就不会阻塞了
"""
def prodcer(p):
while True:
if que.qsize() < 3:
# time.sleep(1)
for i in range(2):
print("[%s]做了包子[%d]" %(p,i))
que.put(i)
que.join() #如果队列一直不为空,则que.join会一直阻塞,如果队列为空,则que.join就不阻塞了
"""
def prodcer(p):
while True:
# time.sleep(1)
for i in range(2):
print("[%s]做了包子[%d]" %(p,i))
que.put(i)
que.join() #如果队列一直不为空,则que.join会一直阻塞,如果队列为空,则que.join就不阻塞了
if __name__ == '__main__':
que = queue.Queue()
p = threading.Thread(target=prodcer,args=("Bob1",))
p2 = threading.Thread(target=prodcer, args=("Bob2",))
c1 = threading.Thread(target=consumer,args=("c1",))
c2 = threading.Thread(target=consumer, args=("c2",))
c3 = threading.Thread(target=consumer, args=("c3",))
c4 = threading.Thread(target=consumer, args=("c4",))
c5 = threading.Thread(target=consumer, args=("c5",))
c6 = threading.Thread(target=consumer, args=("c6",))
p.start()
p2.start()
c1.start()
c2.start()
c3.start()
c4.start()
c5.start()
c6.start()
# p.join()
# que.task_done()
来源:https://www.cnblogs.com/bainianminguo/p/7426273.html


猜你喜欢
- 背景:加入现在有这样的数据,可能一条ocr代表两个label,并且label通过","分隔。我们想把数据转换成下面的。原
- 本文实例讲述了Python实现随机生成手机号及正则验证手机号的方法。分享给大家供大家参考,具体如下:依据根据2017年10月份最新的手机号正
- 等啊等,约会都回来了,终于等到了Google放出今年的情人节Logo,原本下午四点就可以上线的这篇文章,为了等待Google谷歌美国总部的那
- 前言词云的使用相信大家已经不陌生了,使用很简单,直接调用wordcloud包就可以了。它的主要功能是根据文本词汇和词汇频率生成图片,从中可以
- 我就废话不多说了,直接上代码!from enum import Enumclass Values(): values={'
- 序 号前 缀使用的变量/范围或数据类型1a or arrArray2b or blnBoolean3bytByte4
- 概述最近在一家公司实习,入职第一个大一点的需求是将公司开发的两个winstore app的排名信息进行可视化。大概挑选了下,排除了Flask
- 这篇文章主要介绍了python被修饰的函数消失问题解决(基于wraps函数),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的
- 最近几个不错网站被封,让人感觉很不爽,现在既不方便用,也不方便学习参考。正好想到曾经“截图”的事情,其实我认为互联网产品还有个特点,更新换代
- 要想更好的理解 css, 尤其是 IE 下对 css 的渲染,haslayout 是一个非常有必要彻底弄清除的概念。大多IE下的显示错误,就
- 这次主要是爬了京东上一双鞋的相关评论:将数据保存到excel中并可视化展示相应的信息主要的python代码如下:文件1#将excel中的数据
- 一、进入pycharm二、步骤1、开始点击pycharm左上角的file,找到python interpreter,点击右边的设置(长得像齿
- 从文件中读取数据读取整个文件这里假设在当前目录下有一个文件名为'pi_digits.txt'的文本文件,里面的数据如下:3.
- 首先得抛出个重要的前提观点,大屏幕、宽屏幕根本不是为方便“扫视”准备的。所以说以内容为基础的网站设计不用考虑超宽、超大的场景,甚至包括服务类
- 安装pyinstallerpip install pyinstaller制作项目的.spec文件 进入django项目所在路径,
- PyCharm设置数据库,查询数据库语句1、首先先安装BataBase数据插件2、打开DB Navigator 打开DataBase视图3、
- 本文实例为大家分享了vuejs实现下拉框菜单选择的具体代码,供大家参考,具体内容如下方法一:<script type="te
- 新版的path 虽然 取代了 之前的url,但是在写路由的时候不能在路由中直接写正则表达式,不然会找不到页面。解决方法使用re_pathfr
- Blog的全名应该是Web log,中文意思是“网络日志”,后来缩写为Blog,而博客(Blogger)就是写Blog的人。从理解上讲,博客
- 问题背景用户反馈说当与外部客户端进行 FTP 传输时,可以成功登录,但无法传输任何数据。总之 FTP 传输失败,需要来弄清楚到底发生了什么。