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中的super用法详解
May 28 Python
python解决js文件utf-8编码乱码问题(推荐)
May 02 Python
Python实现爬虫爬取NBA数据功能示例
May 28 Python
Python装饰器用法实例分析
Jan 14 Python
Python3爬楼梯算法示例
Mar 04 Python
python统计指定目录内文件的代码行数
Sep 19 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
Jan 14 Python
python列表的逆序遍历实现
Apr 20 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
python 还原梯度下降算法实现一维线性回归
Oct 22 Python
python函数的两种嵌套方法使用
Apr 02 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的Yii 2框架的开发优势
2015/07/03 PHP
php里array_work用法实例分析
2015/07/13 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
js调用图片隐藏&显示实现代码
2013/09/13 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
2015/08/06 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
Vue管理系统前端之组件拆分封装详解
2020/08/23 Javascript
[30:55]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第二场 11.18
2020/11/18 DOTA
linux系统使用python监控apache服务器进程脚本分享
2014/01/15 Python
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
python 爬虫请求模块requests详解
2020/12/04 Python
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
护理学应聘自荐书范文
2014/02/05 职场文书
食品业务员岗位职责
2014/03/18 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
实验室标语
2014/06/21 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书
Python预测分词的实现
2021/06/18 Python
springboot用户数据修改的详细实现
2022/04/06 Java/Android