使用生成器实现协程“并发”

from inspect import isgenerator
import time,queue
def consumer(name):
    print('---开始---')
    while True:
        new_baozi = yield    #实例执行到这行会暂停。当producer的实例调用consumer生成器对象的send()方法,发送n过来后再往下执行。
        print('\033[32;1m%s\033[0m正在吃第%s号包子'%(name,new_baozi))
        time.sleep(1)

def producer():
    con.__next__()    #调用生成器对象的__next__方法,进入consumer函数开始吃包子
    con2.__next__()    #调用生成器对象的__next__方法,进入consumer函数开始吃包子
    n = 0
    while n < 5:
        n+=1
        print('\033[32;1m生产者\033[0m正在做第%s号包子'%n)
        con.send(n)    #将包子编号发送到consumer
        con2.send(n)    #将包子编号发送到consumer

if __name__ == '__main__':
    con = consumer('消费者1')    #生成生成器对象
    con2 = consumer('消费者2')    #生成生成器对象
    p = producer()    #调用producer函。这里的producer函数与consumer函数不同,producer不是生成器,consumer是生成器

print('#################################')

print(isgenerator(con2))
print(isgenerator(con))
print(isgenerator(p))

 

posted on 2021-12-21 14:49  csy113  阅读(23)  评论(0编辑  收藏  举报