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中一些不为人知的基础技巧总结
May 19 Python
python多进程提取处理大量文本的关键词方法
Jun 05 Python
Python使用pickle模块实现序列化功能示例
Jul 13 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
python实现屏保程序(适用于背单词)
Jul 30 Python
Django实现CAS+OAuth2的方法示例
Oct 30 Python
Matplotlib scatter绘制散点图的方法实现
Jan 02 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
Mar 18 Python
基于Python把网站域名解析成ip地址
May 25 Python
浅谈python锁与死锁问题
Aug 14 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
Feb 22 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
Feb 26 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中存储用户ID和密码到mysql数据库的方法
2013/02/06 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
zen_cart实现支付前生成订单的方法
2016/05/06 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
javascript 面向对象编程 万物皆对象
2009/09/17 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
2017/01/19 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
Python打印斐波拉契数列实例
2015/07/07 Python
python实现RSA加密(解密)算法
2016/02/17 Python
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
Python正则表达式指南 推荐
2018/10/09 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
使用django实现一个代码发布系统
2019/07/18 Python
python实现网站微信登录的示例代码
2019/09/18 Python
浅谈TensorFlow中读取图像数据的三种方式
2020/06/30 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
单位工作证明书格式
2014/10/04 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
单位个人查摆问题及整改措施
2014/10/28 职场文书
团代会闭幕词
2015/01/28 职场文书
运动会宣传语
2015/07/13 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python