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

boyanx1个月前技术教程8

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

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

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

相关文章

Go与Rust深度对比分析:从代码看本质

引言Go和Rust是近年来最受关注的两门现代系统编程语言,它们各自有着鲜明的设计哲学和适用场景。本文将通过大量代码示例,从多个维度深入对比这两门语言的异同,帮助开发者根据项目需求做出合适的选择。1....

各视频流播放方式对比

以下是对常见流媒体传输协议的应用场景及优劣势的对比分析,结合最新技术趋势和实际应用需求:一、基于HTTP的协议1. HTTP-FLV应用场景:实时性要求较高的直播(如游戏直播、互动直播)优势:启动速度...

Java隐藏的10倍效率技巧!90%程序员不知道的魔法方法(附代码)

导语:“同事1小时写完的代码,你用了1天?不是技术差距,是你不懂Java的隐藏魔法!今日头条首发7个颠覆认知的编码技巧,文末送《Java性能优化秘籍》!”一、灵魂暴击:用对工具代码量少一半问题场景:“...

几行代码,一窥上帝造物,帝国理工开源CAX,引爆人工生命新纪元

人工生命的革命来临!帝国理工的研究人员,开源了名为CAX的硬件加速工具。只需几行代码,就能复刻人工生命实验,模拟速度可提升2000倍,部分表现甚至超过了GPT-4!人工生命研究的新纪元!「人工生命」...

别让这5个编程习惯毁了你的代码!AI检测工具帮你一键修复

——从“代码草莽”到“AI护法”的升级指南01 硬编码常量:埋下“隐形地雷”坏习惯表现:直接在代码中写入“魔改版”参数(如if (status == 999)),导致后期维护时“代码即天书”。AI修复...

Java同步代码块与同步方法的那些事儿

Java同步代码块与同步方法的那些事儿同步代码块:锁住指定区域想象一下,你正在参加一场紧张的拍卖会,拍卖师手里拿着珍贵的拍品。如果多个竞拍者都想抢着喊价,场面就会变得混乱不堪。这时拍卖师会设置一些规则...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。