def consumer():
r = ''
while True:
n = yield r
if not n:
return
print('[CONSUMER] Consuming %s...' % n)
r = '200 OK'
def produce(c):
c.send(None)#先用空值启动生成器
n = 0
while n < 5:
n = n + 1
print('[PRODUCER] Producing %s...' % n)
r = c.send(n)#启动后在传入真实的值
print('[PRODUCER] Consumer return: %s' % r)
c.close()
c = consumer()
produce(c)
x = yield y
express s
摘要: send() 的作用是使xx赋值为发送的值(send的参数),然后让生成器执行到下个 yield … 即先用 send(none) 启动,然后每次赋值,赋值后就相当于调用了 next().
重点:调用send(value)的时候,首先将value赋值给x,之后继续执行express s等表达式,一直到回过头来重新执行yield y的时候,抛出y,结束本次生成器任务。
注意到consumer函数是一个generator,把一个consumer传入produce后:
-
首先调用c.send(None)启动生成器;
-
然后,一旦生产了东西,通过c.send(n)切换到consumer执行;
-
consumer通过yield拿到消息(n接受赋值),处理,又通过yield把结果传回(返回r);
-
produce拿到consumer处理的结果,继续生产下一条消息;
-
produce决定不生产了,通过c.close()关闭consumer,整个过程结束。’’’