传统的生产者-消费者模型
一个线程写消息,一个线程取消息,通过锁机制控制队列和等待,但一不小心就可能死锁
协程版的生产者-消费者模型
生产者生产消息后,直接通过yield跳转到消费者开始执行,待消费者执行完毕后,切换回生产者继续生产,效率极高
运行示例
# main.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Python基础-协程-生产者和消费者模式
# 消费者
def consumer():
r = ""
while True:
# 有yield关键字就表示该函数是generator函数了
# 作为回报 print(b)写成 yield(b)
# 遇到 yield 语句返回
n = yield r
print("消费者 读消息 %s" % n)
# 生产者
def produce(c):
# 启动生成器
c.send(None)
n = 0
while n < 5:
n = n + 1
print("生产者 写消息 %s" % n)
# 通知消费者
c.send(n)
c.close()
c = consumer()
produce(c)
运行结果
D:\PythonProject\sustudy>python main.py
生产者 写消息 1
消费者 读消息 1
生产者 写消息 2
消费者 读消息 2
生产者 写消息 3
消费者 读消息 3
生产者 写消息 4
消费者 读消息 4
生产者 写消息 5
消费者 读消息 5
关键字
协程 yield关键字 generator函数 生产者-消费者模型