news 2026/5/9 13:02:51

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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网页请求、文件读写、文件下载和上传等,这些任务的特点是需要等待时间,异步能提高任务执行效率。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 4:28:02

03-01:MQ常见问题梳理

1.1:MQ如何保证消息不丢失 1.1.1:哪些环节会有丢消息的可能? 其中,1(发送消息的时候),2(消息到达服务端持久化的时候),4(消费组消费消息的时候&am…

作者头像 李华
网站建设 2026/5/7 0:11:35

DeepSeek V4大模型即将发布,超越Claude的永久免费AI神器,程序员必看!

文章讲述了对即将发布的DeepSeek V4大模型的期待。爆料称V4将专注于代码生成和复杂逻辑,目标超越Claude且永久免费。DeepSeek在底层技术上取得突破,发表《流形约束超连接》论文,并将R1论文扩展至86页。作者期待DeepSeek不仅因为免费好用&…

作者头像 李华
网站建设 2026/4/27 19:08:26

【Java集合】深入浅出 Java HashMap:从链表到红黑树的“进化”之路

🍂 枫言枫语:我是予枫,一名行走在 Java 后端与多模态 AI 交叉路口的研二学生。 “予一人以深耕,观万木之成枫。” 在这里,我记录从底层源码到算法前沿的每一次思考。希望能与你一起,在逻辑的丛林中寻找技术…

作者头像 李华
网站建设 2026/5/9 12:51:36

如何识别企业的深度学习异常检测优势

如何识别企业的深度学习异常检测优势关键词:企业、深度学习、异常检测、优势识别、技术评估摘要:本文围绕如何识别企业在深度学习异常检测方面的优势展开深入探讨。首先介绍了相关背景信息,包括目的范围、预期读者等内容。接着阐述了深度学习…

作者头像 李华
网站建设 2026/5/8 22:01:17

虚拟机假死?SSH 能连却卡 Logo 界面

title: “虚拟机假死?SSH 能连却卡 Logo 界面” date: 2026-1-11 20:30 categories: [技术] tags: [技术,分享] 虚拟机假死?SSH 能连却卡 Logo 界面 作为一名后端开发,虚拟机常常是我们用来跑中间件(MySQL、Redis、Roc…

作者头像 李华
网站建设 2026/5/9 6:45:22

C++ IDE

一、先明确核心需求:不同场景选不同 IDEC IDE 的选择核心看你的使用场景 —— 是新手入门、高校学习,还是企业级开发、跨平台项目,不同场景的最优解不同,先帮你梳理主流选项:IDE 名称核心定位新手友好度适用场景收费 /…

作者头像 李华