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实现字典的key和values的交换
Aug 04 Python
Python3中简单的文件操作及两个简单小实例分享
Jun 18 Python
Python使用Django实现博客系统完整版
Sep 29 Python
解决python爬虫中有中文的url问题
May 11 Python
pandas修改DataFrame列名的实现方法
Feb 22 Python
python程序控制NAO机器人行走
Apr 29 Python
python如何解析配置文件并应用到项目中
Jun 27 Python
在Python中COM口的调用方法
Jul 03 Python
Python使用Turtle库绘制一棵西兰花
Nov 23 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
Feb 11 Python
Django中的AutoField字段使用
May 18 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 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
phpfans留言版用到的install.php
2007/01/04 PHP
php木马webshell扫描器代码
2012/01/25 PHP
Javascript 生成指定范围数值随机数
2009/01/09 Javascript
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
使用Node.js处理前端代码文件的编码问题
2016/02/16 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
python类型强制转换long to int的代码
2013/02/10 Python
Python多线程和队列操作实例
2015/06/21 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
python批量解压zip文件的方法
2019/08/20 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
python自动生成model文件过程详解
2019/11/02 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
用Python 执行cmd命令
2020/12/18 Python
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
Unix控制后台进程都有哪些进程
2016/09/22 面试题
学生爱国演讲稿
2014/01/14 职场文书
无私奉献演讲稿
2014/09/04 职场文书
营业用房租赁协议书
2014/11/26 职场文书
监考失职检讨书
2015/01/26 职场文书
考察邀请函范文
2015/01/31 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
接收函
2019/04/22 职场文书
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android