python之生产者消费者模型实现详解


Posted in Python onJuly 27, 2019

代码及注释如下

#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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现将n个点均匀地分布在球面上的方法
Mar 12 Python
简单介绍Python中的几种数据类型
Jan 02 Python
Python 搭建Web站点之Web服务器与Web框架
Nov 06 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
详解Python 函数如何重载?
Apr 23 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
python实现获取单向链表倒数第k个结点的值示例
Oct 24 Python
8段用于数据清洗Python代码(小结)
Oct 31 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 Python
python单线程下实现多个socket并发过程详解
Jul 27 #Python
如何使用python操作vmware
Jul 27 #Python
利用python计算windows全盘文件md5值的脚本
Jul 27 #Python
Djang的model创建的字段和参数详解
Jul 27 #Python
python中bs4.BeautifulSoup的基本用法
Jul 27 #Python
Django的Modelforms用法简介
Jul 27 #Python
在django admin中添加自定义视图的例子
Jul 26 #Python
You might like
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
PHP常见错误提示含义解释(实用!值得收藏)
2016/04/25 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
php经典趣味算法实例代码
2020/01/21 PHP
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
javascript动态控制服务器控件实例
2014/09/05 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
javascript函数特点实例分析
2015/05/14 Javascript
举例详解JavaScript中Promise的使用
2015/06/24 Javascript
javascript中对变量类型的判断方法
2015/08/09 Javascript
详解JavaScript函数对象
2015/11/15 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
微信小程序使用Socket的实例
2017/09/19 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
python基于右递归解决八皇后问题的方法
2015/05/25 Python
Python获取文件所在目录和文件名的方法
2017/01/12 Python
Python闭包函数定义与用法分析
2018/07/20 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
python 制作网站小说下载器
2021/02/20 Python
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
三月学雷锋活动总结
2014/06/26 职场文书
在职证明范本
2015/06/15 职场文书
教导处教学工作总结
2015/08/12 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书