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 25 Python
使用Python设置tmpfs来加速项目的教程
Apr 17 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
Jan 05 Python
Django中url的反向查询的方法
Mar 14 Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 Python
如何用Python来理一理红楼梦里的那些关系
Aug 14 Python
PyCharm2019安装教程及其使用(图文教程)
Sep 29 Python
Python scrapy增量爬取实例及实现过程解析
Dec 24 Python
Python中实现输入超时及如何通过变量获取变量名
Jan 18 Python
Python通过yagmail实现发送邮件代码解析
Oct 27 Python
详解Django中的FBV和CBV对比分析
Mar 01 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统计字符串中中英文字符的个数
2013/06/23 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
表单验证的完整应用案例探讨
2013/03/29 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
2016/05/10 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
python根据出生年份简单计算生肖的方法
2015/03/27 Python
整理Python最基本的操作字典的方法
2015/04/24 Python
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
Python批量启动多线程代码实例
2020/02/18 Python
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
市场营销个人求职信范文
2014/02/02 职场文书
中学生获奖感言
2014/02/04 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
事业单位年度考核评语
2014/12/31 职场文书
安全员岗位职责
2015/02/10 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python