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

    文章

    922

    浏览量

    43929
  • python
    +关注

    关注

    59

    文章

    4892

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    [VirtualLab] 使用Python运行VirtualLab Fusion光学仿真

    摘要 VirtualLab Fusion允许Python外部访问其建模技术、求解器和结果。这个用例介绍了一种使用路径变量和Visual Studio代码将Python连接到VirtualLab
    发表于 03-31 09:39

    解析Linux的进程、线程和协程

    )轻量级:相对于进程,线程的创建和切换开销较小。 (3)同步与通信:线程之间需要通过同步机制(如互斥锁、信号量)来保证数据的一致性。 程(Coroutine) 程是一种轻量级的用户态线程,它们
    发表于 12-22 11:00

    请问E203怎么扩展处理器?

    我看说E203支持自定义扩展,有EAI接口,可是为什么我只在LSU中找到了跟读取存储器有关的EAI接口呢,别的比如eai_req_instr没有找到,请问谁知道在哪吗,或者说如果要加可扩展处理器的话,这些接口要自己加吗?
    发表于 11-10 07:41

    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

    蜂鸟E203处理器EAI指令及接口

    ,各种不同的组合代表了不同的指令类型,我们用到了预定义的custom-3指令扩展处理器指令,因此指令的opcode为7’b1111011。 由于蜂鸟E203处理器核基于Custom指令进行
    发表于 10-24 07:23

    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

    python app不能运行怎么解决?

    ;python_agent[1241]: xmlrpc request method supervisor.stopProcess failed;python_agent[1241]: xmlrpc request method supervisor.stopProces
    发表于 08-06 06:27

    Modbus和MQTT协议

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

    Modbus与MQTT的区别

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

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

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

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

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