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

Python异步IO——协程

核心概念

​1.异步 I/O (Asynchronous I/O)​​:一种非阻塞的 I/O 操作模式。当程序执行一个 I/O 操作(如网络请求、文件读写)时,它​​不会等待​​该操作完成,而是​​立即返回​​去执行其他任务。当 I/O 操作完成后,再回来处理结果。这极大地提高了程序的吞吐量和资源利用率。

2.​​协程 (Coroutine)​​:一种比线程更轻量级的​​用户态线程​​,由程序员在代码中控制调度。它可以在执行过程中​​暂停​​(await)让出 CPU,并在适当的时候​​恢复​​执行。协程是实现异步编程的基石。

3.​事件循环 (Event Loop)​​:异步编程的​​核心引擎​​。它不断地监听并执行各种任务(如协程、I/O 事件、回调函数),当一个任务等待 I/O 时,事件循环会挂起该任务并执行其他可运行的任务,从而实现单线程内的并发。

1. 定义协程

使用 async def来定义一个协程函数:

import asyncioasync def my_coroutine():print("Hello")await asyncio.sleep(1)  # 模拟一个异步I/O操作,睡眠1秒print("World")
2. 运行协程

使用 asyncio.run()来运行一个协程:

asyncio.run(my_coroutine())

3. 创建任务

使用 asyncio.create_task()将协程包装成一个 ​Task​ 对象,以便并发执行:

async def main():task1 = asyncio.create_task(my_coroutine())task2 = asyncio.create_task(my_coroutine())await task1await task2asyncio.run(main())

4. 并发执行多个协程

使用 asyncio.gather()来同时运行多个协程,并等待它们全部完成:

async def main():await asyncio.gather(my_coroutine(),my_coroutine(),my_coroutine())asyncio.run(main())

以下代码展示了同步和异步方式处理多个网络请求的性能差异:

传统的生产者-消费者模型是一个线程写消息,一个线程取消息,通过锁机制控制队列和等待,但一不小心就可能死锁。

如果改用协程,生产者生产消息后,直接通过yield跳转到消费者开始执行,待消费者执行完毕后,切换回生产者继续生产,效率极高:

http://www.dtcms.com/a/491929.html

相关文章:

  • QML学习笔记(四十)QML的ApplicationWindow和StackView
  • Linux学习笔记--Pinctrl子系统示例
  • 安徽网站建设seo优化如何用asp做网站的登录界面
  • wordpress网站页脚网站进行中英文转换怎么做
  • RFSOC27DR+VU13P 6U VPX板卡
  • 多门店同城配送上新!Tigshop 开源商城系统JAVA5.4.0版本正式发布!
  • 域名访问过程会不会影响网站访问国外 设计师 网站
  • 温州外贸网站设计wordpress简介怎么改
  • css`text-wrap:pretty`
  • RHCA作业
  • 网站建设申请前端网站效果有哪些
  • 小林coding|计算机网络
  • 2025年--Lc193-139. 单词拆分(动态规划在字符串的应用)--Java版
  • 做网站公重庆永川网站建设
  • 高端网站建设公司名字北京页面设计制作
  • 获取hive/impala表下表所有分区
  • C语言中static const extern volatile inline关键字
  • SQL入门:CET-简化复杂查询的利器
  • 零基础网站建设教学培训wordpress弹窗通知插件
  • 北京网络科技有限公司官网吴忠seo
  • 静态代理和动态代理
  • 深度学习论文: Pixel-Perfect Depth with Semantics-Prompted Diffusion Transformers
  • uni-app学习笔记(二)
  • 中国网站设计师广州最专业的网站建设
  • 怎么查看网站的ftp地址wordpress 文章引用
  • 基于JETSON+FPGA+GMSL相机 vs 传统工业相机:高动态范围与低延迟如何重塑机器感知视觉?
  • 物联网开发学习总结(5)—— 深入对比 TDengine、InfluxDB 和 TimescaleDB 三大主流时序数据库的性能表现
  • 网站pv统计方法深圳logo设计公司哪家好
  • 软件测试— 测试分类
  • 三井物产商品预测竞赛思路