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 相关文章推荐
centos系统升级python 2.7.3
Jul 03 Python
Python实现的使用telnet登陆聊天室实例
Jun 17 Python
Python 制作糗事百科爬虫实例
Sep 22 Python
总结python实现父类调用两种方法的不同
Jan 15 Python
Python实现判断一个字符串是否包含子串的方法总结
Nov 21 Python
详解Numpy中的广播原则/机制
Sep 20 Python
python list转置和前后反转的例子
Aug 26 Python
python如何将两个txt文件内容合并
Oct 18 Python
python 实现生成均匀分布的点
Dec 05 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
Feb 24 Python
python 链接sqlserver 写接口实例
Mar 11 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 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 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
JQuery 无废话系列教程(二) jquery实战篇上
2009/06/23 Javascript
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
关于iframe跨域POST提交的方法示例
2017/01/15 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
关于JS与jQuery中的文档加载问题
2017/08/22 jQuery
Node.js readline模块与util模块的使用
2018/03/01 Javascript
在vue项目中使用sass的配置方法
2018/03/20 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
初步解析Python中的yield函数的用法
2015/04/03 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
2016/09/21 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
pycharm远程调试openstack代码
2017/11/21 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
python微信公众号开发简单流程
2018/03/23 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
Python根据服务获取端口号的方法
2019/09/25 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
详解python内置模块urllib
2020/09/09 Python
仓库门卫岗位职责
2013/12/22 职场文书
优秀干部获奖感言
2014/01/31 职场文书
公司领导班子四风对照检查材料
2014/09/27 职场文书
个人总结格式范文
2015/03/09 职场文书
2015年置业顾问工作总结
2015/04/07 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
高中政治教学反思
2016/02/23 职场文书
python开发飞机大战游戏
2021/07/15 Python