def consumer():
# 一旦外部调用send(None)方法,就会执行此函数,遇到第一个yield就会停止
r = 'Waiting for food...'
while True:
# 第一次遇到yield的时候,r被初始化为"waiting for food...",此时r被传出。
# 但是导致第一次yield执行的send传入值(None)并没有机会接收到。此处的n等着下一次被send方法传入
n = yield r
if n:
print('[CONSUMER] Consuming %s...' % n)
r = 'Consumed'
else:
print 'None' #此案例中,这句永远不会被执行到,因为外部的send(None)是启动时传入的,此函数内部并没有任何机会接收它
def produce(c):
# 启动协程。此处Python规定只能传入None,原因是协程刚刚启动,而传入值只能在某次yield被调用之后才可以使用
r = c.send(None)
#此处应收到传出的"waiting for food..."
print('[PRODUCER] Consumer return: %s' % r)
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)
团长王三
刚刚开始了解python,如果有些概念性错误请指出。
运行结果: [PRODUCER] Consumer return: Waiting for food... [PRODUCER] Producing 1... [CONSUMER] Consuming 1... [PRODUCER] Consumer return: Consumed [PRODUCER] Producing 2... [CONSUMER] Consuming 2... [PRODUCER] Consumer return: Consumed [PRODUCER] Producing 3... [CONSUMER] Consuming 3... [PRODUCER] Consumer return: Consumed [PRODUCER] Producing 4... [CONSUMER] Consuming 4... [PRODUCER] Consumer return: Consumed [PRODUCER] Producing 5... [CONSUMER] Consuming 5... [PRODUCER] Consumer return: Consumed