加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Python中 Sync与 Async执行快慢的实例比较分析

发布时间:2023-03-29 14:00:04 所属栏目:教程 来源:
导读:这篇文章主要讲解了“Python中Sync与Async执行速度快慢实例对比分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中Sync与Async执行速度
这篇文章主要讲解了“Python中Sync与Async执行速度快慢实例对比分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中Sync与Async执行速度快慢实例对比分析”吧!

1.一个简单的例子
首先先从一个例子了解两种调用方法的差别, 为了能清晰的看出他们的运行时长差别, 都让他们重复运行10000次, 具体代码如下:
 
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运算, 在这个场景无法发挥优势, 但会在高并发场景则会大放光彩, 造成这样的原因则是因为async是以协程运行的, sync是以线程运行的。

NOTE: 目前所说的async语法都是支持网络io, 而文件系统的异步io还不是非常的完善, 所以文件系统的异步读写是通过封装交给多线程去处理, 而不是协程。 

2.一个io的例子
为了了解async在io场景下的运行优势, 先假定有一个io场景--Web后台服务通常需要处理许多请求, 所有请求都是从不同的客户端发出的, 示例如图:
 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章