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搭建Django应用程序步骤及版本冲突问题解决
Nov 19 Python
python发布模块的步骤分享
Feb 21 Python
python实现RSA加密(解密)算法
Feb 17 Python
总结Python编程中函数的使用要点
Mar 20 Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 Python
Python3.6简单的操作Mysql数据库的三个实例
Oct 17 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
Jan 15 Python
详解python和matlab的优势与区别
Jun 28 Python
Django之模板层的实现代码
Sep 09 Python
Python tkinter三种布局实例详解
Jan 06 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
Python 使用生成器代替线程的方法
Aug 04 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
一个程序下载的管理程序(四)
2006/10/09 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
jquery队列函数用法实例
2014/12/16 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
JavaScript随机生成颜色的方法
2016/10/15 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
python实现批量监控网站
2016/09/09 Python
Python入门之后再看点什么好?
2018/03/05 Python
python实现复制文件到指定目录
2019/10/16 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
解决Windows下python和pip命令无法使用的问题
2020/08/31 Python
Python通过字典映射函数实现switch
2020/11/06 Python
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
护士专业推荐信
2013/11/02 职场文书
化妆师职业生涯规划书
2014/02/16 职场文书
居安思危观后感
2015/06/11 职场文书
学习十八大的感悟
2015/08/11 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
自考生自我评价
2019/06/21 职场文书