python课堂整理20----生产者消费者模型
一、实现功能:店铺生产包子,消费者来吃
import time
def producter():
ret = []
for i in range(10):
time.sleep(0.1)
ret.append('包子%s'%i)
return ret def consumer(res):
for index, baozi in enumerate(res):
time.sleep(0.1)
print('第%s个人吃了%s'%(index, baozi)) a = producter()
consumer(a)
弊端:生产包子和吃包子是两个独立的过程,只有生产者把包子做完,消费者才能开始吃
思考:怎么实现两个程序的并发过程
######################################
从生成器入手,因为生成器函数能保留函数的运行状态
def test():
print('开始啦')
yield 0
print('第一次')
yield 1
print('第二次')
yield 2 t = test() #只是生成一个生成器函数,并没有执行
print(t)
res = t.__next__()
print(res)
♦ send()
①send函数必须传入一个参数,也能触发一次生成器
②send将传入的参数传递给yield,此时再把yield赋给一个变量,即保留该参数
def test():
print('开始啦')
first = yield 0 #接受send传过来的值,赋值给first
print('第一次',first)
yield 1
print('第二次')
yield 2 t = test() #只是生成一个生成器函数,并没有执行
res = t.__next__()
print(res)
a = t.send('我喜欢你')
print(a)
♦用上述知识实现生产者消费者并发过程
import time
def consumer(name):
print('我是%s,我准备吃包子了' %name)
while True:
baozi = yield
time.sleep(0.1)
print('%s开心地把%s吃掉了' %(name, baozi)) def producter():
c1 = consumer('dabai')
c1.__next__()
for i in range(10):
time.sleep(0.1)
c1.send('包子%s' %i)
return '吃完了,真开心'
a = producter()
print(a)
多人并发过程
import time
def consumer(name):
print('我是%s,我准备吃包子了' %name)
while True:
baozi = yield
time.sleep(0.1)
print('%s开心地把%s吃掉了' %(name, baozi)) def producter():
c1 = consumer('dabai')
c2 = consumer('jinling')
c1.__next__()
c2.__next__()
for i in range(10):
time.sleep(0.1)
c1.send('包子%s' %i)
c2.send('包子%s' %i)
return '吃完了,真开心'
a = producter()
print(a)
python课堂整理20----生产者消费者模型的更多相关文章
- python 并发编程 多进程 生产者消费者模型总结
生产者消费者模型总结 生产者消费者模型什么时候用? 1.程序中有两类角色 一类负责生产数据(生产者) 一类负责处理数据(消费者) 2.引入生产者消费者模型为了解决的问题是 平衡生产者与消费者之间的速度 ...
- python 并发编程 多进程 生产者消费者模型介绍
一 生产者消费者模型介绍 为什么要使用生产者消费者模型 生产者指的是生产数据的任务,消费者指的是处理数据的任务, 生产数据目的,是为了给消费者处理. 在并发编程中,如果生产者处理速度很快,而消费者处理 ...
- python生产者消费者模型
业界用的比较广泛,多线程之间进行同步数据的方法,解决线程之间堵塞,互相不影响. server --> 生产者 client --> 消费者 在一个程序中实现又有生产者又有消费者 ,生产者不 ...
- 进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼
1. 操作系统基本知识,进程,线程 CPU是计算机的核心,承担了所有的计算任务: 操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件:那么操作系统是如何进行任务调度的呢? ...
- Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型
一.进程锁(同步锁/互斥锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 例 ...
- python网络编程--进程(方法和通信),锁, 队列,生产者消费者模型
1.进程 正在进行的一个过程或者说一个任务.负责执行任务的是cpu 进程(Process: 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在 ...
- 【python】-- 队列(Queue)、生产者消费者模型
队列(Queue) 在多个线程之间安全的交换数据信息,队列在多线程编程中特别有用 队列的好处: 提高双方的效率,你只需要把数据放到队列中,中间去干别的事情. 完成了程序的解耦性,两者关系依赖性没有不大 ...
- 进击的Python【第九章】:paramiko模块、线程与进程、各种线程锁、queue队列、生产者消费者模型
一.paramiko模块 他是什么东西? paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 先来个实例: import param ...
- Python学习笔记——进阶篇【第九周】———线程、进程、协程篇(队列Queue和生产者消费者模型)
Python之路,进程.线程.协程篇 本节内容 进程.与线程区别 cpu运行原理 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Ev ...
- python并发编程之多进程(二):互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型
一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终 ...
随机推荐
- Python装饰器和回调函数
1.装饰器 装饰器用来实现一种切面功能,即一些函数在调用前都必须实现的功能,比如用户是否登录,用户是否有权限这类需求,都很容易由装饰器来实现. import functools def log(fun ...
- vmware centos7虚拟机克隆系统如何修改网卡设置?
1.克隆虚拟机,克隆前需关闭虚拟机2.克隆之后的网卡问题解决,其中需要修改HWADDR和UUID /etc/sysconfig/network-scripts/ifcfg-ens32 uuid获取 ...
- Spring Boot2(二):使用Spring Boot2集成Mybatis缓存机制
前言 学习SpringBoot集成Mybatis的第二章,了解到Mybatis自带的缓存机制,在部署的时候踩过了一些坑.在此记录和分享一下Mybatis的缓存作用. 本文章的源码再文章末尾 什么是查询 ...
- mysql-5.7.24-winx64安装与Navicat_for_MySQL_10.1.7注册码
mysql安装图解:https://blog.csdn.net/qq_38455201/article/details/83419450 Navicat注册码名:组织:注册码:均为NAVN-LNXG- ...
- postman --- 如何在用户登陆和CSRF验证的场景下使用
一.前提 安装postman和Postman Interceptor postman应用放到桌面: 二.用户登陆 这种场景很简单,只要开启Interceptor,然后先请求登陆地址,再继续请求其他地址 ...
- AIX/Linux/HP-UX查看CPU/内存/磁盘/存储命令
1.1 硬件环境验证方式 硬件环境主要包括CPU.内存.磁盘/存储.网络设备(如F5等).系统特有设备(如密押设备等)等,其中网络设备和系统特有设备由网络管理员或项目组提供为准,本节主要关注CP ...
- Kafka 学习之路(一)—— Kafka简介
一.简介 Apache Kafka是一个分布式的流处理平台.它具有以下特点: 支持消息的发布和订阅,类似于RabbtMQ.ActiveMQ等消息队列: 支持数据实时处理: 能保证消息的可靠性投递: 支 ...
- Java学习笔记-spring整合mybatis
这个项目就是一个例子,只有添加图书的功能: 项目架构: resource: 整合流程: 1.pom文件节点,这两个是整合用的,其他节点不再赘述: <!-- https://mvnreposito ...
- 面试中的作用域题和THIS 指向的问题
作用域的面试题 1. fn() function fn () { console.log(12) } var as = function () { console.log(45) } 2. var a ...
- 网络IO-阻塞、非阻塞、IO复用、异步
网络socket输入操作分为两个阶段:等待网络数据到达和将到达内核的数据复制到应用进程缓冲区.对这两个阶段不同的处理方式将网络IO分为不同的模型:IO阻塞模型.非阻塞模型.多路复用和异步IO. 一 阻 ...