当前位置: 首页 > news >正文

异步函数与异步生成器

 

异步函数介绍

定义:使用 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.jsqmd.com/news/285546/

相关文章:

  • 充电即服务:智慧园区打造“人-车-桩”智能互联新体验
  • Java基于SSM+JSP的网络远程作业批改系统的设计与实现
  • 物联网+AI双驱动,智慧园区消防电源监控迈入智能新时代
  • 道AI能不能帮助造出黄金? - 指南
  • Java基于SSM+JSP的经典诗文爱好者学习交流平台
  • CAS入门
  • Java基于SSM+JSP的网上购物商城
  • 2025年度精粹|乳酰化研究大爆发:一文汇总年度重要突破
  • Java基于SSM+JSP的高校师资管理系统的设计与实现
  • 固高运动卡运动模式介绍(转载学习)
  • 学长亲荐2026专科生AI论文工具TOP9:开题报告神器大测评
  • Java基于SSM+JSP的高校学科竞赛管理系统
  • 护资刷题 APP 推荐:2026 护资备考神器,易小考 AI 带你避开备考陷阱
  • Java基于SSM+JSP的农业无人机租赁系统
  • 初中生活小记
  • 【拯救HMI】搞定“桑拿房”里的HMI:高温高湿环境设计实战指南
  • 【拯救HMI】让新手也能轻松上手:HMI设计的三个贴心思路
  • 0x3f 第39天 复习 9:13-10:13
  • 护考刷题APP2026年最新测评:易小考、阿虎、蓝基因全方位对比
  • 全国乳企首张“黑灯工厂”证书诞生!荣联汇智助力海河乳品打造全链路智能新标杆
  • 26岁曾月薪15K,现已失业3个月,我依然没有拿到offer......
  • 嵌入式 C 语言进阶:内存管理与指针优化的实战技巧
  • 脂质纳米颗粒LNP广泛用于小分子和核酸药物的递送 | MCE (MedChemExpress)
  • 怎样用Postman做接口自动化测试及完美的可视化报告
  • 今天面了一个来字节要求月薪23K,明显感觉他背了很多面试题...
  • git、gitee
  • 定时器输出捕获与输入比较
  • 2026年口碑好的硅油厂家推荐,助力提升工业效率
  • 什么是http代理,http代理的作用是什么?
  • 线性结构之字符串