Python的Sync与Async执行速度的快慢

本文探讨了Python同步(Sync)与异步(Async)执行在不同场景下的速度差异。在纯CPU运算场景中,同步代码稍微快一些,但异步在IO密集型任务和高并发场景下展现出优势,其协程调度避免了线程上下文切换的开销,尤其在处理大量并发请求时,性能更优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前记

Python新的版本中支持了async/await语法, 很多文章都在说这种语法的实现代码会变得很快, 但是这种快是有场景限制的。这篇文章将尝试简单的解释为何Async的代码在某些场景比Sync的代码快。

1.一个简单的例子

首先先从一个例子了解两种调用方法的差别, 为了能清晰的看出他们的运行时长差别, 都让他们重复运行10000次, 具体代码如下:

import asyncio
import time


n_call = 10000

# sync的调用时长
def demo(n: int) -> int:
    return n ** n

s_time = time.time()
for i in range(n_call):
    demo(i)
print(time.time() - s_time)

# async的调用时长
async def sub_demo(n: int) -> int:
    return n ** n

async def async_main() -> None: 
    for i in range(n_call):
        await sub_demo(i)

loop = asyncio.get_event_loop()
s_time = time.time()
loop.run_until_complete(async_main())
print(time.time() - s_time)

# 输出
# 5.310615682601929
# 5.614157438278198

可以看得出来, sync的语法大家都是很熟悉, 而async的语法比较不一样, 函数需要使用async def开头, 同时调用async def函数需要使用await语法, 运行的时候需要先获取线程的事件循环, 然后在通过事件循环来运行async_main函数来达到一样的效果, 但是从运行结果的输出可以看得出, sync的语法在这个场景中比async的语法速度快了一些些(由于Python的GIL原因, 这里无法使用多核的性能, 只能以单核来跑)。

造成这样的原因是同样由同一个线程执行的情况下(cpu单核心),async的调用还需要经过一些事件循环的额外调用, 这会产生一些小开销, 从而运行时间会比sync的慢, 同时这是一个纯cpu运算的示例, 而async的的优势在于网络io运算, 在这个场景无法发挥优势, 但会在高并发场景则会大放光彩, 造成这样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值