异步函数与异步生成器

news/2026/1/22 20:38:37/文章来源:https://www.cnblogs.com/uncleyong/p/19516222

 

异步函数介绍

定义:使用 async def 关键字定义的函数,可以暂停执行并在稍后恢复

特点:函数内部可以使用 await 关键字等待其他异步操作完成

返回值:调用时返回协程对象(coroutine),而不是直接执行函数体

性能方面:

  • I/O 密集型:异步并发优势明显
  • CPU 密集型:对于计算密集型任务,异步并不能带来性能提升

其它:避免在异步函数中使用阻塞操作,如 time.sleep(),使用异步版本的操作,如 await asyncio.sleep()

 

定义

async def function_name(parameters):# 异步函数体await some_async_operation()return result

  

定义要点

  • 使用 async def 替代普通函数的 def
  • 函数内部可以使用 await 关键字
  • 可以使用 return 返回值

 

调用

在异步环境中调用

  • 使用 await:在另一个异步函数中使用 await function_name()
  • 返回协程对象:直接调用 function_name() 返回协程对象

在同步环境中调用

  • 使用 asyncio.run():asyncio.run(function_name())
  • 创建事件循环:手动创建和管理事件循环

 

示例

同步环境中调用:asyncio.run

示例:

async def hello():print("全栈测试笔记")return "qzcsbj"res = hello()
print(res, type(res))

  

输出结果

<coroutine object hello at 0x0000023CA3CA5B40> <class 'coroutine'>
<sys>:0: RuntimeWarning: coroutine 'hello' was never awaited

 

上面直接调用异步函数hello()会返回一个协程对象,而不是执行函数

修改:asyncio.run()是运行异步函数的标准方式

import asyncioasync def hello():print("全栈测试笔记")return "qzcsbj"res = hello()
print(res, type(res))
res2 = asyncio.run(res)
print(res2, type(res2))

  

输出结果:

<coroutine object hello at 0x00000216F8162680> <class 'coroutine'>
全栈测试笔记
qzcsbj <class 'str'>

 

优化

import asyncioasync def hello():print("全栈测试笔记")return "qzcsbj"if __name__ == "__main__":res = hello()print(res, type(res))res2 = asyncio.run(res)print(res2, type(res2))

 

执行流程:

  • asyncio.run(hello()) 直接启动事件循环
  • 直接执行 hello() 函数并返回结果
  • 简洁的单函数执行模

 

异步环境中调用:await

import asyncioasync def hello():print("全栈测试笔记")return "qzcsbj"async def call_hello():res = hello()print(res, type(res))res2 = await res  # await res等价于await hello()print(res2, type(res2))if __name__ == "__main__":# call_hello()  # 报错:coroutine 'call_hello' was never awaited call_hello()asyncio.run(call_hello())

  

输出结果:

<coroutine object hello at 0x0000023816222680> <class 'coroutine'>
全栈测试笔记
qzcsbj <class 'str'>

 

执行流程:

  • asyncio.run(call_hello()) 启动事件循环
  • call_hello() 内部先获取 hello() 的协程对象
  • 通过 await 等待协程执行完成
  • 演示了协程对象的创建和等待过程

 

异步生成器

参考:https://www.cnblogs.com/uncleyong/p/6208547.html

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1201680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

充电即服务:智慧园区打造“人-车-桩”智能互联新体验

1、概述 园区停车场有电动汽车和电动自行车&#xff0c;均需要提供充电桩。充电桩管理系统通过物联网技术对接入系统的充电桩站点和各个充电桩进行不间断地数据采集和监控&#xff0c;解决园区充电桩使用、监控问题。电动自行车充电可采用投币、扫码充电方式&#xff0c;电动汽…

Java基于SSM+JSP的网络远程作业批改系统的设计与实现

项目说明 随着网络技术的飞速发展和普及&#xff0c;教育领域正经历着前所未有的变革。传统的作业批改方式&#xff0c;如纸质作业的人工批改&#xff0c;已经逐渐暴露出效率低下、反馈不及时、资源消耗大等问题。为了解决这些问题&#xff0c;网络远程作业批改系统应运而生&a…

物联网+AI双驱动,智慧园区消防电源监控迈入智能新时代

1、概述 园区消防设备比较多&#xff0c;消防设备电源监控系统主要功能就是用于监测消防设备的工作电源是否正常&#xff0c;保障在发生火灾时消防设备可以正常投入使用。 消防设备电源监控监控系统采用消防二总线&#xff0c;以建筑为单位设置区域分机采集消防设备电源状态&am…

道AI能不能帮助造出黄金? - 指南

道AI能不能帮助造出黄金? - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

Java基于SSM+JSP的经典诗文爱好者学习交流平台

项目说明 在信息爆炸的时代&#xff0c;互联网技术的迅猛发展&#xff0c;为各类文化交流与传承提供了新的可能。经典诗文作为中华文化的瑰宝&#xff0c;其传承与发扬显得尤为重要。因此&#xff0c;构建一个专为经典诗文爱好者设计的学习交流平台&#xff0c;不仅是技术的革新…

CAS入门

一、先搞懂&#xff1a;为什么需要CAS&#xff1f; 在讲CAS之前&#xff0c;我们先解决一个基础问题&#xff1a;并发场景下&#xff0c;简单的自增操作&#xff08;比如i&#xff09;为什么会出问题&#xff1f; 举个例子&#xff1a;你有一个变量int count 0&#xff0c;让1…

Java基于SSM+JSP的网上购物商城

项目说明 随着时代的发展&#xff0c;电子商务已经遍布了我们生活的每一个角落&#xff0c;尤其是在移动互联网迅速发展的今天&#xff0c;网上购物基本已经成为了人们生活中的一部分&#xff0c;为了让购物变得更加的方便快捷我们通过Java语言开发了本次的网上购物商城系统。 …

2025年度精粹|乳酰化研究大爆发:一文汇总年度重要突破

精准医学与蛋白组学关注国内外蛋白组学、蛋白修饰组学应用领域的科研进展&#xff0c;普及蛋白组学在生命科学及基础医学研究中的应用&#xff0c;一起交流学习。如有侵权请联系后台删除时光飞逝&#xff0c;2025年的科研画卷已徐徐合拢。过去一年&#xff0c;乳酰化修饰在24年…

Java基于SSM+JSP的高校师资管理系统的设计与实现

项目说明 随着信息技术的飞速发展&#xff0c;高校信息化水平成为衡量一所高校综合实力的重要标准之一。传统的师资管理方式通常依赖于人工操作&#xff0c;工作量大且容易出错。为了提高师资信息的管理水平我们开发了本系统&#xff0c;本系统主要实现了教师信息管理&#xff…

学长亲荐2026专科生AI论文工具TOP9:开题报告神器大测评

学长亲荐2026专科生AI论文工具TOP9&#xff1a;开题报告神器大测评 2026年专科生AI论文工具测评&#xff1a;如何选对“开题报告神器”&#xff1f; 随着AI技术在学术领域的广泛应用&#xff0c;越来越多的专科生开始借助智能写作工具提升论文撰写效率。然而&#xff0c;面对市…

Java基于SSM+JSP的高校学科竞赛管理系统

项目说明 随着时代的发展&#xff0c;人们对人才的定义也发生了翻天覆地的变化&#xff0c;尤其我对高校的学生来说他们除了基本的学业之外&#xff0c;通常还会参加一些竞赛活动来提高自己的竞技能力和专业水平&#xff0c;但是传统的学科竞赛都是在使用人工处理和报名的方式进…

护资刷题 APP 推荐:2026 护资备考神器,易小考 AI 带你避开备考陷阱

护资考试通过率逐年走低,部分地区中职考生通过率仅 35%,很多考生明明付出了大量时间和精力,却依然遗憾落榜,核心原因在于陷入了 “盲目刷题、考点跑偏、错题反复错” 的备考陷阱。想要在 2026 护资考试中成功通关,…

Java基于SSM+JSP的农业无人机租赁系统

项目说明 随着科技的不断进步和发展&#xff0c;无人机技术以其高效、灵活、广泛的应用前景&#xff0c;逐渐深入到各个领域。在乡村振兴战略中&#xff0c;无人机技术更是为乡村的发展提供了新的动力。传统的农业都是人工手动的方式在进行管理这种管理方式非常的落后&#xf…

初中生活小记

前言(春风得意马蹄疾,一日看尽长安花) 在2026年1月举办的一北强基考试成功通过,完成了从初二以来的梦想,也进入了“计划”的一个新阶段,也标志着初中生活的半结束。 初一上学期(千红万紫安排著,只待新雷第一声…

【拯救HMI】搞定“桑拿房”里的HMI:高温高湿环境设计实战指南

在冶金车间、矿山井下或者海上平台&#xff0c;HMI就像待在“桑拿房”加“水帘洞”里工作&#xff0c;这对设备来说是极限挑战。这场和高温高湿较量的设计&#xff0c;得全面防着热、湿、尘、震这几个坏家伙&#xff0c;从硬件选择、结构设计到界面&#xff0c;每个细节都不能放…

【拯救HMI】让新手也能轻松上手:HMI设计的三个贴心思路

制造业人员流动大是常态&#xff0c;怎么能让新来的操作员快速又安全地独立顶岗&#xff0c;成了保证生产稳定的关键。一个好的、对新手友好的HMI&#xff0c;核心就是做到三点&#xff1a;用引导代替让人死记硬背&#xff0c;用容错设计代替出错了只会责怪&#xff0c;用清晰反…

0x3f 第39天 复习 9:13-10:13

二叉树的中序遍历acac翻转二叉树不是最优解ac原地修改&#xff0c;遍历&#xff08;递归&#xff09;的一直是「根节点的子树」二叉树直径acac有序数组变成搜索树acx二叉搜索树第k小的数字你的代码在找到第 k 小元素时&#xff0c;return node.val 只会返回给上一层递归&#x…

护考刷题APP2026年最新测评:易小考、阿虎、蓝基因全方位对比

随着 2026 年护士资格考试竞争白热化(全国报考人数预计突破 120 万,部分省份通过率不足 35%),一款高效的刷题 APP 成为通关关键。市面上护考工具五花八门,究竟哪款能真正帮你 “少走弯路、精准提分”?本文基于 2…

全国乳企首张“黑灯工厂”证书诞生!荣联汇智助力海河乳品打造全链路智能新标杆

近日&#xff0c;天津海河乳品有限公司荣获全国乳制品行业首张“黑灯工厂”认证证书&#xff0c;标志着其在智能制造与数字化转型领域已走在行业前沿&#xff0c;为中国乳业的智能化升级树立了全新标杆&#xff01;值得关注的是&#xff0c;这座引领未来的“黑灯工厂”背后&…