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中列表、字符串、字典的常用操作
Sep 19 Python
Python有序字典简单实现方法示例
Sep 28 Python
Python rstrip()方法实例详解
Nov 11 Python
Python实现统计英文文章词频的方法分析
Jan 28 Python
Python中整数的缓存机制讲解
Feb 16 Python
python实现银联支付和支付宝支付接入
May 07 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
python Timer 类使用介绍
Dec 28 Python
教你使用pyinstaller打包Python教程
May 27 Python
C3 线性化算法与 MRO之Python中的多继承
Oct 05 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连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
PHP简单实现防止SQL注入的方法
2018/03/13 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
一个简单的瀑布流效果(主体形式自写)
2013/05/27 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
解决webpack打包速度慢的解决办法汇总
2017/07/06 Javascript
总结js函数相关知识点
2018/02/27 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
vue使用video插件vue-video-player详解
2020/10/23 Javascript
Python矩阵常见运算操作实例总结
2017/09/29 Python
python3处理含有中文的url方法
2018/05/10 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
2018/10/29 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
Python递归函数特点及原理解析
2020/03/04 Python
在HTML5 canvas里用卷积核进行图像处理的方法
2018/05/02 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
屈臣氏菲律宾官网:Watsons菲律宾
2020/06/30 全球购物
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
实习心得体会
2014/01/02 职场文书
大学毕业寄语大全
2014/04/10 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
买卖合同协议书范本
2014/10/18 职场文书
小学总务工作总结
2015/08/13 职场文书
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android