Python_生成器(下)之单线并行--生产着消费者模型

Posted crazy_cat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python_生成器(下)之单线并行--生产着消费者模型相关的知识,希望对你有一定的参考价值。

 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_生成器(下)之单线并行--生产着消费者模型的主要内容,如果未能解决你的问题,请参考以下文章

Python协程实现生产者消费者模型

python学习_day35_并发编程之多进程3

并行模式之生产者-消费者模式

Python基础-----生成器函数(生产者消费者模型)

Java--多线程之生产者消费者模式;线程池ExecutorService

JUC - 多线程之Synchronized和Lock锁;生产者消费者模式