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实现爬虫统计学校BBS男女比例(一)
Dec 31 Python
Python中的__slots__示例详解
Jul 06 Python
python+opencv实现的简单人脸识别代码示例
Nov 14 Python
Python实现读取json文件到excel表
Nov 18 Python
python使用jieba实现中文分词去停用词方法示例
Mar 11 Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 Python
pandas把所有大于0的数设置为1的方法
Jan 26 Python
python能开发游戏吗
Jun 11 Python
python实现AHP算法的方法实例(层次分析法)
Sep 09 Python
python 实现波浪滤镜特效
Dec 02 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
Jan 28 Python
Pytorch 中net.train 和 net.eval的使用说明
May 22 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的header和asp中的redirect比较
2006/10/09 PHP
php图片加水印原理(超简单的实例代码)
2013/01/18 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
AngularJS ng-bind-html 指令详解及实例代码
2016/07/30 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
python实现大文件分割与合并
2019/07/22 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
python连接mongodb集群方法详解
2020/02/13 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
2020/11/09 Python
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
法律进社区实施方案
2014/03/21 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
商务日语专业的自荐信
2014/05/23 职场文书
博士生导师推荐信
2014/07/08 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
先进集体申报材料
2014/12/25 职场文书