首页 > 编程语言 > 详细

python yield实现协程(生产者-消费者)

时间:2019-12-07 09:47:33      阅读:90      评论:0      收藏:0      [点我收藏+]
def customer():
    r=""
    while True:
        n=yield r#,接收生产者的消息,并向消费者发送r
        print("customer receive",n)
        r="ok"

def produce(c):
    c.send(None)#第一次启动协程必须发送None值,否则报如下错误
    #TypeError: cant send non-None value to a just-started generator
    for i in range(6):
        print("start send to customer",i)
        r=c.send(i)#向消费者发送值
        print("receive customer",r)

c=customer()
produce(c)
start send to customer 0
customer receive 0
receive customer ok
start send to customer 1
customer receive 1
receive customer ok
start send to customer 2
customer receive 2
receive customer ok
start send to customer 3
customer receive 3
receive customer ok
start send to customer 4
customer receive 4
receive customer ok
start send to customer 5
customer receive 5
receive customer ok

简单的生产者-消费者模型就这样生成了!

yield不仅可以yield r发送数据,还可以接收数据n=yield,或者同时接收并发送数据n=yield r接收n发送r

传统的生产者-消费者模型是一个线程写消息,一个线程取消息,通过锁机制控制队列和等待,但一不小心就可能死锁。

如果改用协程,生产者生产消息后,直接通过yield跳转到消费者开始执行,待消费者执行完毕后,切换回生产者继续生产,效率极高

 

python yield实现协程(生产者-消费者)

原文:https://www.cnblogs.com/pfeiliu/p/12000356.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!