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使用win32com在百度空间插入html元素示例
Feb 20 Python
Python实现的下载8000首儿歌的代码分享
Nov 21 Python
VSCode下配置python调试运行环境的方法
Apr 06 Python
python3实现字符串的全排列的方法(无重复字符)
Jul 07 Python
python numpy元素的区间查找方法
Nov 14 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
python flask web服务实现更换默认端口和IP的方法
Jul 26 Python
基于django ManyToMany 使用的注意事项详解
Aug 09 Python
Python实现元素等待代码实例
Nov 11 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
Jan 16 Python
Python生成器实现简单"生产者消费者"模型代码实例
Mar 27 Python
Keras自定义IOU方式
Jun 10 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
给ECShop添加最新评论
2015/01/07 PHP
smarty中常用方法实例总结
2015/08/07 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
Python读写Excel文件的实例
2013/11/01 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
python重试装饰器的简单实现方法
2019/01/31 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
Python 解析xml文件的示例
2020/09/29 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
如何用border-image实现文字气泡边框的示例代码
2020/01/21 HTML / CSS
HTML5 Canvas阴影使用方法实例演示
2013/08/02 HTML / CSS
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
五十岁生日宴会答谢词
2014/01/15 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
离婚协议书怎么写
2015/01/26 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
宾馆客房管理制度
2015/08/06 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
投资入股协议书
2016/03/22 职场文书
Linux中sftp常用命令整理
2022/06/28 Servers