Python基础-协程 yield关键字

本文介绍了一种利用协程实现的高效生产者-消费者模型,通过yield关键字实现生产者与消费者之间的直接切换,避免了传统模型中可能出现的死锁问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传统的生产者-消费者模型

一个线程写消息,一个线程取消息,通过锁机制控制队列和等待,但一不小心就可能死锁

协程版的生产者-消费者模型

生产者生产消息后,直接通过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函数 生产者-消费者模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值