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)
#解釋
'''注意到consumer函數是一個generator,把一個consumer傳入produce后:
首先調用c.send(None)啟動生成器;
然后,一旦生產了東西,通過c.send(n)切換到consumer執行;
consumer通過yield拿到消息(n接受賦值),處理,又通過yield把結果傳回(返回r);
produce拿到consumer處理的結果,繼續生產下一條消息;
produce決定不生產了,通過c.close()關閉consumer,整個過程結束。'''