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

    文章

    889

    浏览量

    41252
  • python
    +关注

    关注

    53

    文章

    4754

    浏览量

    84157
收藏 人收藏

    评论

    相关推荐

    岩土工程监测中振弦采集仪的布设方案及实施步骤

    岩土工程监测中振弦采集仪的布设方案及实施步骤 岩土工程监测中,河北稳控科技振弦采集仪是一种常用的地下水位和土层压缩性监测工具。它通过采集振弦的振动信号来确定地下水位和土层的压缩性,为岩土
    的头像 发表于 05-06 13:25 174次阅读
    岩土工程监测中振弦采集仪的布设方案及实施步骤<b class='flag-5'>简</b><b class='flag-5'>析</b>

    智慧灯杆一键告警功能的实用场景

    智慧路灯杆是一种兼具智能化和多功能的新型物联网基础设施,通过搭载一键告警对讲盒,能够大大丰富安防及报警求助资源,对提升城市的安全性和管理效能具有重要的作用。本篇就结合城市中的不同场景,智慧灯杆一键告警功能的实用功能。
    的头像 发表于 04-28 16:42 263次阅读
    <b class='flag-5'>简</b><b class='flag-5'>析</b>智慧灯杆一键告警功能的实用场景

    城市综合管廊能效管理平台在火灾防控与消防设计

    城市综合管廊能效管理平台在火灾防控与消防设计 张颖姣 安科瑞电气股份有限公司 上海嘉定 201801 摘要:城市综合管廊中布置很多管线,将其称之为地下生命线,虽然没有大量人员聚集,但是一旦这个
    的头像 发表于 04-11 16:39 209次阅读
    <b class='flag-5'>简</b><b class='flag-5'>析</b>城市综合管廊能效管理平台在火灾防控与消防设计

    电气火灾的原因及其对策

    电气火灾的原因及其对策 张颖姣 安科瑞电气股份有限公司 上海嘉定201801 摘要:随着人们生活水平的提高,电气已成为日常生活及生产作业中必不可少的能源。电给人们带来便利的同时,也存在着一定
    的头像 发表于 03-12 10:18 389次阅读
    <b class='flag-5'>简</b><b class='flag-5'>析</b>电气火灾的原因及其对策

    【鸿蒙】OpenHarmony 4.0蓝牙代码结构

    OpenHarmony 4.0蓝牙代码结构前言 OpenHarmony 4.0上蓝牙仓和目录结构进行一次较大整改,本文基于4.0以上版本对蓝牙代码进行分析,便于读者快速了解和学习
    的头像 发表于 02-26 16:08 1197次阅读
    【鸿蒙】OpenHarmony 4.0蓝牙代码结构<b class='flag-5'>简</b><b class='flag-5'>析</b>

    电动汽车交流充电桩系统的设计方案

    电动汽车交流充电桩系统的设计方案 张颖姣 安科瑞电气股份有限公司 上海嘉定201801 摘要:作为新能源汽车的基础动力装置,交流充电桩也是可以促使新能源汽车正常行驶的关键内容。与其他汽车
    的头像 发表于 02-26 11:00 1394次阅读
    <b class='flag-5'>简</b><b class='flag-5'>析</b>电动汽车交流充电桩系统的设计方案

    新能源电动汽车充电桩选型与安装的探讨

    新能源电动汽车充电桩选型与安装的探讨 张颖姣 安科瑞电气股份有限公司 上海嘉定201801 摘要:大力发展和推广电动汽车是国家发展新能源、清洁能源以应对日益突出的燃油供求矛盾和环境污染问题,加大
    的头像 发表于 02-26 10:56 553次阅读
    <b class='flag-5'>简</b><b class='flag-5'>析</b>新能源电动汽车充电桩选型与安装的探讨

    电动汽车充电桩检测技术应用及分析

    电动汽车充电桩检测技术应用及分析 张颖姣 安科瑞电气股份有限公司 上海嘉定 201801 摘要:直流和交流充电桩是我国当前电动汽车充电桩中投运数量多的种类,为了维持正常运行和使用,更要对检测
    的头像 发表于 02-26 10:52 1094次阅读
    <b class='flag-5'>简</b><b class='flag-5'>析</b>电动汽车充电桩检测技术应用及分析

    谈谈程的那些事儿

    随着异步编程的发展以及各种并发框架的普及,程作为一种异步编程规范在各类语言中地位逐步提高。我们不单单会在自己的程序中使用程,各类框架如fastapi,aiohttp等也都是基于异步以及程进行实现。那到底什么是
    的头像 发表于 01-26 11:36 1036次阅读
    谈谈<b class='flag-5'>协</b>程的那些事儿

    储能的三大应用场景

    储能的三大应用场景-古瑞瓦特 随着太阳能风能发电比例的不断增长,可再生能源间歇性和不稳定性的缺陷日益突出,不稳定的光伏和风电对电网的冲击也日益严重。抽水储能,压缩空气和蓄电池储能等技术越来越被
    的头像 发表于 12-20 16:30 1127次阅读
    储能的三大应用场景<b class='flag-5'>简</b><b class='flag-5'>析</b>

    C语言的break转移语句讲解

    C语言的break转移语句是一种用于跳出循环或者switch语句的控制结构。它的作用是提前结束循环或者switch语句,从而避免不必要的计算或者执行。
    的头像 发表于 11-22 15:34 552次阅读
    C语言的<b class='flag-5'>break</b>转移语句讲解

    何选择一个合适的程来获得CPU执行权

    程。更不用说很多活跃的语言如python,java等,也都是支持程的。尽管这些程可能名称不同,甚至用法也不同,但它们都可以被划分为两大类,一类是有(stackful)
    的头像 发表于 11-13 14:10 330次阅读
    何选择一个合适的<b class='flag-5'>协</b>程来获得CPU执行权

    Linux线程、线程与异步编程、程与异步介绍

    线程之间的切换不需要陷入内核,但部分操作系统中用户态线程的切换需要内核态线程的辅助。 程是编程语言(或者 lib)提供的特性(程之间的切换方式与过程可以由编程人员确定),是用户态操
    的头像 发表于 11-11 11:35 875次阅读
    Linux线程、线程与异步编程、<b class='flag-5'>协</b>程与异步介绍

    Python yield的作用

    要理解yield的作用,你必须理解生成器是什么。在理解生成器之前,必须先理解迭代器。 迭代器 当您创建一个列表时,你可以逐个读取它的项。逐项读取其项称为迭代: mylist是一个可迭代的对象。当你
    的头像 发表于 11-02 11:21 348次阅读
    <b class='flag-5'>Python</b> <b class='flag-5'>yield</b>的作用

    如何学会 Python yield 关键词

    要理解yield的作用,你必须理解生成器是什么。在理解生成器之前,必须先理解迭代器。 1.迭代器 当您创建一个列表时,你可以逐个读取它的项。逐项读取其项称为迭代: mylist是一个可迭代的对象
    的头像 发表于 10-31 11:06 267次阅读
    如何学会 <b class='flag-5'>Python</b> <b class='flag-5'>yield</b> 关键词