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

Python中同步异步编程原来是这样!附代码案例

有人问,Python中所谓的同步异步编程到底是什么呀?

同步异步其实很好理解,比如你去某站下载视频,有两种情况,分别代表同步和异步。

1、点击下载视频A,等A下载好后,再点击下载视频B,以此类推下载所有视频。

2、点击下载视频A,不管是否下载好,然后立即点击下载视频B,各下载任务同时进行中,以此类推下载所有视频。

第1种是同步,是排队执行,只有前一个任务完成后才执行后一个任务。

第2种是异步,边干边等,利用等待时间去处理其他任务,可以多个任务灵活并行。

如果不考虑网速带宽,第1种效率很明显会低于第2种。

下面咱们用Python代码测试下,首先是同步执行下载任务。

# 测试:使用同步代码 import time def dowload(name): print(f"{name}开始下载") time.sleep(2) # 模拟视频下载耗时 print(f"{name}下载完成") begin = time.time() dowload("视频A") # 必须等A下载完... dowload("视频B") # ...才会开始下载视频B end = time.time() print("用时{}秒".format(end - begin))

结果如下,用时4秒+。

因为同步会阻塞,视频A下载好了才开始下载视频B。

接下来使用异步编程来实现同样的任务。

这里注意下,Python中使用异步编程,需要async/await特殊语法。

# 测试:使用异步代码 import asyncio import time asyncdef dowload(name): print(f"{name}开始下载") await asyncio.sleep(2) # 非阻塞等待 print(f"{name}下载完成") asyncdef main(): await asyncio.gather( dowload("视频A"), dowload("视频B") ) begin = time.time() asyncio.run(main()) end = time.time() print("用时{}秒".format(end - begin))

结果如下,只用了2秒+。

异步不用等待A下载完成,直接下载B,两个同时进行,不存在等待阻塞。

这下就很好理解同步和异步的原理和区别了,同步是排队干活,异步并不是同时干很多活,而是灵活的分配精力在多个任务上,不因为等待而耗费时间。

那同步和异步的使用场景有哪些呢?

同步适合那些严格依赖执行顺序的任务,比如订单任务(下单->发货)、转账任务(扣款->入账)等,还有CPU计算密集型任务,像是数学计算、图像处理等。

异步则适合那些IO操作密集型和高并发的任务,比如给用户发消息、web网页请求、文件读写、文件下载和上传等,这些任务的特点是需要等待时间,异步能提高任务执行效率。

所以说同步异步适合不同的业务场景,并不存在好坏对错之分。

下表是一些场景和案例对比,供参考。

http://www.jsqmd.com/news/230881/

相关文章:

  • 大模型技术入门:程序员如何抓住AI风口,抢占职场先机_35岁程序员抓住风口,转行AI大模型
  • Orange,可以拖拉拽的Python数据挖掘软件,强烈推荐~
  • 通信原理篇---双极性不归零码的功率谱密度
  • Anthropic大模型智能体评估全攻略:理论+实践,助你成为AI专家
  • 通信原理篇---单极性不归零码功率谱密度
  • HCIP代码小练-2
  • HCIP代码小练-1
  • 【Java集合】深入浅出 Java HashMap:从链表到红黑树的“进化”之路
  • 虚拟机假死?SSH 能连却卡 Logo 界面
  • 踩坑三个月,我用 Blazor 重构了一个 AI UI 协议,这些教训值得你看看
  • Java Web的学习路径
  • 通信原理篇---单极性归零码与双极性归零码
  • 【无人机路径规划】基于快速随机扩展树算法RRT避开长方体、圆柱体、球体三类障碍物,生成从起点到终点的无碰撞路径附matlab代码
  • C++ IDE
  • 浩思动力混动系统赋能吉利雷达金刚PHEV高性能皮卡上市
  • 《Numba AOT编译核心技术:斩断JIT启动延迟的实操手册》
  • 图像形态学+边缘检测及CNN关联
  • 连锁饮品店安全用电白皮书:能源设备智能管控与预警
  • “刷房子这点事,怎么就成了动态规划经典题?”——聊透 Paint House 背后的思维方式
  • PyFlink DataStream Operators 算子分类、函数写法、类型系统、链路优化(Chaining)与工程化踩坑
  • 【图像传输】基于MPSK算法实现图像传输系统附Matlab代码
  • 67、RNN的AI歌词生成案例(构建数据集)
  • 大模型Function Calling实战指南:从原理到代码,让AI更强大
  • 基于Python的商场停车管理系统的设计与实现_szvoh5b2
  • 【机器人导航】基于A_Satr算法模拟网格地图多机器人导航附Matlab代码
  • 基于机器学习的就业岗位推荐系统2025_96o5u917
  • AI原生应用:量化技术的最新研究进展
  • 基于人脸识别的智慧医疗预约挂号平台2025_0u15j7gc
  • AI如何克服“金鱼记忆“?从RAG到AgentRAG再到记忆增强系统详解
  • 吐血推荐专科生用的9款AI论文软件测评