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操作SQLite简明教程
Jul 10 Python
Python学习小技巧之列表项的拼接
May 20 Python
PyQt 线程类 QThread使用详解
Jul 16 Python
Python函数式编程
Jul 20 Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 Python
Python3解释器知识点总结
Feb 19 Python
Python使用POP3和SMTP协议收发邮件的示例代码
Apr 16 Python
python实现从ftp服务器下载文件
Mar 03 Python
pytorch  网络参数 weight bias 初始化详解
Jun 24 Python
python实现学生管理系统开发
Jul 24 Python
最新pycharm安装教程
Nov 18 Python
python使用smtplib模块发送邮件
Dec 17 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脚本的10个技巧(8)
2006/10/09 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
PDO::errorInfo讲解
2019/01/28 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
php7性能提升的原因详解
2019/10/13 PHP
你必须知道的Javascript知识点之&quot;this指针&quot;的应用
2013/04/23 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
vue源码入口文件分析(推荐)
2018/01/30 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
微信小程序页面调用自定义组件内的事件详解
2019/09/12 Javascript
关于vue组件事件属性穿透详解
2019/10/28 Javascript
Vue点击切换Class变化,实现Active当前样式操作
2020/07/17 Javascript
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
python实现稀疏矩阵示例代码
2017/06/09 Python
python Flask实现restful api service
2017/12/04 Python
使用sklearn之LabelEncoder将Label标准化的方法
2018/07/11 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
Python单元测试与测试用例简析
2019/11/09 Python
Python tkinter之Bind(绑定事件)的使用示例
2021/02/05 Python
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
医学生自荐信
2013/12/03 职场文书
美术教师自我鉴定
2014/02/12 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
Python List remove()实例用法详解
2021/08/02 Python