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实现的去除win下文本文件头部BOM的代码
Feb 10 Python
python 多进程通信模块的简单实现
Feb 20 Python
python中使用urllib2获取http请求状态码的代码例子
Jul 07 Python
python实现同时给多个变量赋值的方法
Apr 30 Python
浅析Python编写函数装饰器
Mar 18 Python
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
老生常谈python的私有公有属性(必看篇)
Jun 09 Python
Python微信库:itchat的用法详解
Aug 14 Python
使用PyTorch实现MNIST手写体识别代码
Jan 18 Python
利用Python自动化操作AutoCAD的实现
Apr 01 Python
基于python爬取梨视频实现过程解析
Nov 09 Python
python解压zip包中文乱码解决方法
Nov 27 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获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
php实现查看邮件是否已被阅读的方法
2013/12/03 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
PHP实现远程下载文件到本地
2015/05/17 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
2019/09/09 Javascript
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
python实现下载整个ftp目录的方法
2017/01/17 Python
Python单元测试简单示例
2018/07/03 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
Python同时处理多个异常的方法
2020/07/28 Python
Python暴力破解Mysql数据的示例
2020/11/09 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
北美最大的参茸药食商城:德成行
2020/12/06 全球购物
玩具公司的创业计划书
2013/12/31 职场文书
服务之星事迹材料
2014/05/03 职场文书
建筑工地质量标语
2014/06/12 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
2014年话务员工作总结
2014/11/19 职场文书
保送生自荐信
2015/03/06 职场文书
执行力心得体会范文
2016/01/11 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
go select编译期的优化处理逻辑使用场景分析
2021/06/28 Golang