# encoding=utf-8
#send函数与yield函数都是python中的内部封装函数,两者需要相结合使用
#函数执行顺序:调用A,执行1,输出:要开始啃骨头了...,然后执行2,输出:consumer消费者A
#执行到3,函数停止,因为没有send函数调用。
#调用,执行1,输出:要开始啃骨头了...,然后执行2,输出:consumer消费者B
#调用函数C,执行7,输出:正在生产骨头 1,因为执行了send 5 函数,所以调用 4,
# 输出:[消费者A] 正在啃骨头 1,啃完骨头1,继续等,执行2,输出:consumer消费者A
#调用send 6函数 ,开始执行4,输出:[消费者B] 正在啃骨头 1,啃完骨头1,继续等,执行2,输出:consumer消费者B
#然后依次循环,即可
def consumer(name):
print("要开始啃骨头了...") # 1
while True:
print("consumer%s " % name) # 2
bone = yield # 3
print("[%s] 正在啃骨头 %s" % (name, bone)) #4
def producer(obj1, obj2):
obj1.send(None) # 5
obj2.send(None) # 6
n = 0
while n < 5:
n += 1
print("正在生产骨头 %s" % n) # 7
obj1.send(n)
obj2.send(n)
if __name__ == '__main__':
con1 = consumer("消费者A") # A
con2 = consumer("消费者B") # B
producer(con1, con2) # C
#输出结果:
# 要开始啃骨头了...
# consumer消费者A
# 要开始啃骨头了...
# consumer消费者B
# 正在生产骨头 1
# [消费者A] 正在啃骨头 1
# consumer消费者A
# [消费者B] 正在啃骨头 1
# consumer消费者B
# 正在生产骨头 2
# [消费者A] 正在啃骨头 2
# consumer消费者A
# [消费者B] 正在啃骨头 2
# consumer消费者B
# 正在生产骨头 3
# [消费者A] 正在啃骨头 3
# consumer消费者A
# [消费者B] 正在啃骨头 3
# consumer消费者B
# 正在生产骨头 4
# [消费者A] 正在啃骨头 4
# consumer消费者A
# [消费者B] 正在啃骨头 4
# consumer消费者B
# 正在生产骨头 5
# [消费者A] 正在啃骨头 5
# consumer消费者A
# [消费者B] 正在啃骨头 5
# consumer消费者B