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之让人欢喜让人忧的迭代
Oct 02 Python
在服务器端实现无间断部署Python应用的教程
Apr 16 Python
Python 多线程抓取图片效率对比
Feb 27 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
详解用python写网络爬虫-爬取新浪微博评论
May 10 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
Jan 20 Python
MxNet预训练模型到Pytorch模型的转换方式
May 25 Python
基于python图书馆管理系统设计实例详解
Aug 05 Python
详解python tkinter 图片插入问题
Sep 03 Python
解决Django transaction进行事务管理踩过的坑
Apr 24 Python
Python中常见的反爬机制及其破解方法总结
Jun 10 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
理解php Hash函数,增强密码安全
2011/02/25 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
2012/12/07 PHP
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
python获取代码运行时间的实例代码
2018/06/11 Python
Python切片操作深入详解
2018/07/27 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
python能否java成为主流语言吗
2020/06/22 Python
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
工商治理实习生的自我评价分享
2014/02/20 职场文书
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
初中教师业务学习材料
2014/05/12 职场文书
体育课外活动总结
2014/07/08 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
人事任命通知书
2015/04/21 职场文书