0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python协程之yield break简析

冬至配饺子 来源:缪斯之子 作者:肖新苗 2022-08-24 17:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

目标

协程中断, 并交出控制权

想说的话

本系列主要侧重理解, 而不是编程初期的知识学习, 当我想要理解协程中断的时候, 搜索了很多文章, 都指向需要使用asyncio.get_event_loop(), 但这是一个封装了很多逻辑的代码, 为了直观理解, 编写了如下例子

例子说明

每一行程序都是按顺序一步一步执行的,如果有程序不是按顺序执行,表示曾经交出了控制权,以下的例子,本来应该应该顺序输出1,2,但是因为req1交出了控制权,所以,输出了2,1


import time
from collections import deque

_delay = deque()


def sleep0():
yield
return None


def req1():
yield
b = yield from sleep0()
return 1


def req2():
yield
return 2


f1 = req1()
f1.send(None)
try:
result = f1.send(None)
except StopIteration as e:
print(f'正常打印 {e.value}')
pass
else:
_delay.append((f1, 1+time.time()))

f = req2()
f.send(None)
try:
f.send(None)
except StopIteration as e:
print(f'正常打印 {e.value}')
pass

for i, v in _delay:
start = v
while True:
end = time.time()
if start < end:
try:
result = i.send(None)
except StopIteration as e:
print(f'延迟打印 {e.value}')
pass
break
pass

'''
结果:
正常打印 2
延迟打印 1
'''


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 中断
    +关注

    关注

    5

    文章

    913

    浏览量

    43592
  • python
    +关注

    关注

    57

    文章

    4860

    浏览量

    89661
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    NICE处理器接口信号解读--以demo为例

    的复位信号。 nice_active表示nice处理器是否正在工作,但该信号在上层文件中未例化,如下图所示。 nice_mem_holdup信号在e203_lsu_ctrl.v文件中用于覆盖cpu
    发表于 10-31 08:01

    利用Verdi调试处理器的实现步骤

    本次给大家介绍的是利用Verdi调试处理器的实现步骤。 有时为了观察处理器运行情况,需要查看处理器接口的信号波形,此时可以用Verdi来查看主处理器发给处理器的自定义指令以进一
    发表于 10-30 08:26

    MD5信息摘要算法实现二(基于蜂鸟E203处理器)

    本设计首先根据MD5处理器的功能设计MD5算法IP核,软件部分使用串口程序助手进行64位加解密结果的输出,E203内核根据地址取出对应的数据,使用相关的指令进行传输显示。通过NICE接口将MD5
    发表于 10-30 07:54

    NICE处理器demo分析及测试

    实现思路: 1.硬件设计,编写相应的verilog文件,需要注意的是NICE处理器定义了一些基本的接口; 2.编写驱动,通过内联汇编的伪指令.insn配置相关的驱动设置; 3.编写用于测试
    发表于 10-23 07:05

    基于E203 NICE处理器扩展指令

    1、实现功能 基于官方提供的demo nice的硬件代码,设计一个基于e203 nice处理的加法器。 2NICE处理器理论学习 nice处理器的作用主要是用于控制通路的管理 去年
    发表于 10-21 14:35

    基于E203 NICE处理器扩展指令2.0

    实现功能:基于官方提供的demo nice的硬件代码,设计一个基于e203 nice处理的加法器。 NICE处理器理论学习 nice处理器的作用主要是用于控制通路的管理 去年国一的
    发表于 10-21 10:39

    Modbus和MQTT协议

    Modbus和MQTT协议在设计目标、通信模式、应用场景、网络结构、数据传输效率、设备兼容性及安全性等方面存在显著差异,具体分析如下: 一、设计目标与定位 Modbus :诞生于1979年,由施耐德公司开发,最初为串行通信(RS232/RS485)设计。其目标是解决工业设备(如PLC、传感器、仪表)之间的短距离、点对点或小范围组网通信,核心是设备间直接的数据读写控制。Modbus属于工业现场总线协议,侧重底层设备的高效数据交互。 MQTT :2013年由OASIS标准化,最初
    的头像 发表于 07-10 14:25 522次阅读

    Modbus与MQTT的区别

    Modbus和MQTT是工业领域中两种不同的通信协议,在设计目标、应用场景、通信模式等方面存在显著差异,以下从多个维度两者的区别: 1.设计目标与起源 Modbus 诞生于1979年,由施耐德
    的头像 发表于 07-10 14:10 735次阅读

    请问NICE处理器与传统ocb外设相比的优势有什么?

    使用扩展指令调用NICE处理器完成预定操作,给出的优势通常为代替CPU处理数据,但其实使用片上总线挂一个外设,然后驱动外设完成操作也可以实现相同的功能,所以想问一下处理器相比于外设实现还有没有其它方面的优势
    发表于 05-29 08:21

    10分钟上手写代码,LuatOS程轻松掌握!

    10分钟学会LuatOS程,从此你的程序也能像通勤族利用碎片时间一样游刃有余。现在就去动手试一试,开启异步编程新体验! 写给第一次听说程的你‌: 别怕!程不是复杂概念,看完这篇,10分钟就能
    的头像 发表于 04-10 15:18 522次阅读
    10分钟上手写代码,LuatOS<b class='flag-5'>协</b>程轻松掌握!

    电机冲刺北交所上市

    近日,北交所网站显示,常州三电机股份有限公司(以下简称“三电机”)答复了第二轮问询函。三电机此前于2023年12月29日IPO申请获北交所受理。
    的头像 发表于 03-28 17:53 1790次阅读

    进程、线程、程傻傻分不清?一文带你彻底扒光它们的\"底裤\"!

    权(yield)实现协作,单线程内玩出多任务的感觉。 技术细节: 程切换成本≈打哈欠(0.1μs~1μs) 阻塞操作会直接让出CPU(比如等待网络请求时,自动切换到其他程) 必须依附于线程(就像
    发表于 03-26 09:27

    Python绘图Matplotlib快速参考手册

     PYTHON
    发表于 02-07 14:04 0次下载

    使用Python实现xgboost教程

    使用Python实现XGBoost模型通常涉及以下几个步骤:数据准备、模型训练、模型评估和模型预测。以下是一个详细的教程,指导你如何在Python中使用XGBoost。 1. 安装XGBoost
    的头像 发表于 01-19 11:21 2259次阅读

    EE-116:SHARC词DMA

    电子发烧友网站提供《EE-116:SHARC词DMA.pdf》资料免费下载
    发表于 01-05 09:56 0次下载
    EE-116:SHARC<b class='flag-5'>简</b>词DMA