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编写一个简单的tic-tac-toe游戏的教程
Apr 16 Python
Python中你应该知道的一些内置函数
Mar 31 Python
python实现简单聊天应用 python群聊和点对点均实现
Sep 14 Python
在VS Code上搭建Python开发环境的方法
Apr 06 Python
Python定义一个跨越多行的字符串的多种方法小结
Jul 19 Python
python数据挖掘需要学的内容
Jun 23 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
Aug 15 Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 Python
基于python实现坦克大战游戏
Oct 27 Python
用基于python的appium爬取b站直播消费记录
Apr 17 Python
python数据分析之用sklearn预测糖尿病
Apr 22 Python
PyQt5爬取12306车票信息程序的实现
May 14 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
一个目录遍历函数
2006/10/09 PHP
国内php原创论坛
2006/10/09 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
浅谈Vue.js
2017/03/02 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
Python队列的定义与使用方法示例
2017/06/24 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
Python namedtuple命名元组实现过程解析
2020/01/08 Python
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
预备党员党课思想汇报
2014/01/13 职场文书
宿舍打麻将检讨书
2014/01/24 职场文书
社区七一党员活动方案
2014/01/25 职场文书
硕士生工作推荐信
2014/03/07 职场文书
运动会拉拉队口号
2014/06/09 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
Python OpenCV实现图像模板匹配详解
2022/04/07 Python
使用CSS实现音波加载效果
2023/05/07 HTML / CSS