Python之两种模式的生产者消费者模型详解


Posted in Python onOctober 26, 2018

第一种使用queue队列实现:

#生产者消费者模型 其实服务器集群就是这个模型
# 这里介绍的是非yield方法实现过程

import threading,time
import queue
q = queue.Queue(maxsize=10)

def Producer(anme):
 # for i in range(10):
 #  q.put('骨头%s'%i)
 count = 1
 while True:
  q.put('骨头%s'%count)
  print('生产了骨头',count)
  count += 1
  time.sleep(1)

def Consumer(name):
 # while q.qsize() >0:
 while True:
  print('[%s] 取到[%s] 并且吃了它...'%(name,q.get()))
  time.sleep(1)

p = threading.Thread(target=Producer,args=('shenchanzhe',))
c = threading.Thread(target=Consumer,args=('xiaofeizhe01',))
c1 = threading.Thread(target=Consumer,args=('xiaofeizhe02',))

p.start()
c.start()
c1.start()

使用yield协程的方法来实现生产者和消费者:

#生产者和消费者,使用生成器的方式,就是一个简单的并行,
import time
# 这是一个消费者 一直在等待完成吃包子的动作
def consumer(name):
 print('%s准备吃包子了!'%name) #打印出对应的消费者的名字
 while True: #执行一个死循环 实际上就是需要调用时才会执行,没有调用就会停止在yield
  baozi = yield #在它就收到内容的时候后就把内容传给baozi
  print('包子【%s】来了,被【%s】吃了'%(baozi,name))
def producer(name):
 c1 = consumer('A') #它只是把c1变成一个生成器
 c2 = consumer('B')
 c1.__next__() #第一个next只是会走到yield然后停止
 c2.__next__()
 print('老子开始做包子了')
 for i in range(1,10):
  time.sleep(1)
  print('三秒做了两个包子')
  c1.send(i) #这一步其实就是调用next方法的同时传一个参数i给field接收,然后baozi=i
  c2.send(i+1)
  #其实这里是这样的,在send的时候只是继续执行yield下面的语句,然后去去yield,再次停在这儿

# producer('aea')
c = consumer('aaa') #没next一次就会将程序执行一次
c.__next__()
c.__next__()
c.__next__()

以上这篇Python之两种模式的生产者消费者模型详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
Python3中的json模块使用详解
May 05 Python
selenium+python 去除启动的黑色cmd窗口方法
May 22 Python
python matlibplot绘制多条曲线图
Feb 19 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
wxpython绘制圆角窗体
Nov 18 Python
使用IDLE的Python shell窗口实例详解
Nov 19 Python
pycharm 更改创建文件默认路径的操作
Feb 15 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
Python实现Appium端口检测与释放的实现
Dec 31 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
Oct 26 #Python
Python批处理更改文件名os.rename的方法
Oct 26 #Python
浅谈django rest jwt vue 跨域问题
Oct 26 #Python
Python os.rename() 重命名目录和文件的示例
Oct 25 #Python
python实现旋转和水平翻转的方法
Oct 25 #Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 #Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 #Python
You might like
PHP网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
Yii2中datetime类的使用
2016/12/17 PHP
yii框架搜索分页modle写法
2016/12/19 PHP
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
2018/11/20 jQuery
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
Python中Numpy mat的使用详解
2019/05/24 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
python修改字典键(key)的方法
2019/08/05 Python
Python如何实现动态数组
2019/11/02 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
学生个人的自我评价分享
2013/11/05 职场文书
生日礼品店创业计划书范文
2014/03/21 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
JavaScript流程控制(分支)
2021/12/06 Javascript
mysql幻读详解实例以及解决办法
2022/06/16 MySQL