1 import time
2 def consumer(name):
3 print('%s准备吃包子了!' %name)
4 while True:
5 baozi = yield
6 print('[%s]包子来了,被[%s]吃了' %(baozi,name))
7
8 def producer(name):
9 c = consumer('胖虎')
10 c2 = consumer('狗子')
11 c.__next__()
12 c2.__next__()
13 print('我要做包子啦!狗子,胖虎')
14 for i in a:
15 time.sleep(1)
16 print('%s做了2个包子'%name)
17 c.send(i)
18 c2.send(i)
19 a = ['韭菜馅','猪肉馅', '鸡蛋馅','茴香馅']
20 producer('Lee')

1、生成器中,next 和 send 有什么区别呢?

next只是单纯的调用yeild,程序跳转到yeild,但是不会给yeild传值。
send也是调用yeild,但是同时给yeild传值

2、那么看程序第11、12行,问题来了,此处为什么必须要执行next?

过程分析:

消费者 '胖虎' 执行完之后执行一个next,如果不执行这个next,那么
consumer(name)中什么动作都没有执行,只有使用next这个指令,才可以使程序执行到 baozi = yield 这个语句,
这样才可以执行第三行语句,也就是打印第3行中print中的内容

原理分析:

c = consumer('胖虎') 这条语句只是将函数consumer(name)这个函数变成了一个生成器,而并不执行consumer(name)的内容,
因为此时consumer(name)不是函数,而是一个生成器
所以要想执行consumer(name)中的内容,只有使用next,才可以让程序在consumer(name)中往下走

Python_1生成器(下)之单线并行--生产着消费者模型的更多相关文章

  1. Linux——多线程下解决生产消费者模型

    我们学习了操作系统,想必对生产消费者问题都不陌生.作为同步互斥问题的一个经典案例,生产消费者模型其实是解决实际问题的基础模型,解决很多的实际问题都会依赖于它.而此模型要解决最大的问题便是同步与互斥.而 ...

  2. 生产者和消费者模型producer and consumer(单线程下实现高并发)

    #1.生产者和消费者模型producer and consumer modelimport timedef producer(): ret = [] for i in range(2): time.s ...

  3. Py迭代和迭代器,生成器,生产者和消费者模型

    迭代器iter 1.迭代的含义: 每次生成的结果依赖于上一次.问路,先问第一个人,第一个人不知道他就说第二个人知道,然后去找第二个人.第二个人不知道就说第三个人知道,然后去找第三个人 2.递归的含义: ...

  4. C++11 并发指南九(综合运用: C++11 多线程下生产者消费者模型详解)

    前面八章介绍了 C++11 并发编程的基础(抱歉哈,第五章-第八章还在草稿中),本文将综合运用 C++11 中的新的基础设施(主要是多线程.锁.条件变量)来阐述一个经典问题——生产者消费者模型,并给出 ...

  5. 综合运用: C++11 多线程下生产者消费者模型详解(转)

    生产者消费者问题是多线程并发中一个非常经典的问题,相信学过操作系统课程的同学都清楚这个问题的根源.本文将就四种情况分析并介绍生产者和消费者问题,它们分别是:单生产者-单消费者模型,单生产者-多消费者模 ...

  6. Java生产消费者模型——代码解析

    我们将生产者.消费者.库存.和调用线程的主函数分别写进四个类中,通过抢夺非线程安全的数据集合来直观的表达在进行生产消费者模型的过程中可能出现的问题与解决办法. 我们假设有一个生产者,两个消费者来共同抢 ...

  7. Python进阶----进程之间通信(互斥锁,队列(参数:timeout和block),), ***生产消费者模型

    Python进阶----进程之间通信(互斥锁,队列(参数:timeout和block),), ***生产消费者模型 一丶互斥锁 含义: ​ ​ ​ 每个对象都对应于一个可称为" 互斥锁&qu ...

  8. java线程基础巩固---多线程下的生产者消费者模型,以及详细介绍notifyAll方法

    在上一次[http://www.cnblogs.com/webor2006/p/8419565.html]中演示了多Product多Consumer假死的情况,这次解决假死的情况来实现一个真正的多线程 ...

  9. 守护进程,互斥锁, IPC ,Queue队列,生产消费着模型

    1.守护进程 什么是守护进程? 进程是一个正在运行的程序 守护进程也是一个普通进程,意思是一个进程可以守护另一个进程,比如如果b是a的守护进程,a是被守护的进程,如果a进程结束,b进程也会随之结束. ...

随机推荐

  1. C# AutoMapper:流行的对象映射框架,可减少大量硬编码,很小巧灵活,性能表现也可接受。

    AutoMapper 是一个对象-对象映射器,可以将一个对象映射到另一个对象. 官网地址:http://automapper.org/ 官方文档:https://docs.automapper.org ...

  2. 【命令】top命令

    功用: <---实时动态地查看系统的整体运行情况,两个命令都是查看运行状况,但是htop更加易用---> TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命 ...

  3. $emit的用法

    自定义事件$emit.使用$emit建立父子组件之间的通信.子组件到父组件之间的通信. 子组件: 父组件:

  4. 【译】对Rust中的std::io::Error的研究

    原文标题:Study of std::io::Error 原文链接:https://matklad.github.io/2020/10/15/study-of-std-io-error.html 公众 ...

  5. Java Tree 树 数据结构

    说到树结构就不得不回顾 链表结构 https://www.cnblogs.com/easyidea/p/13371863.html 如果链表结构中再多一个指针会是什么情况? 是不是像树根一样,这就是 ...

  6. 单细胞分析实录(3): Cell Hashing数据拆分

    在之前的文章里,我主要讲了如下两个内容:(1) 认识Cell Hashing:(2): 使用Cell Ranger得到表达矩阵.相信大家已经知道了cell hashing与普通10X转录组的差异,以及 ...

  7. .Net Core — 依赖注入

    在.NET Core 中 依赖注入Dependency-Injection)作为基础知识,在.Net Core中无处不在:这么重要的知识接下来就了解和在.Net Core中使用. 一.依赖注入 说到依 ...

  8. 将WCF迁移到gRPC

    使用protobuf-net.Grpc将WCF服务迁移到gRPC非常简单.在这篇博文中,我们将看看它到底有多简单.微软关于将WCF服务迁移到gRPC的官方指南只提到了Gooogle.Protobuf方 ...

  9. 中移动ipv6-老毛子固件获取ipv6设置

    对于有ipv6的服务商原理上可以参照下图

  10. linux的 复制 删除 解压 压缩 打包

    liunx 删除 删除文件夹实例: rm -rf /var/log/httpd/access 将会删除/var/log/httpd/access目录以及其下所有文件.文件夹 2 删除文件使用实例: r ...