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后台服务通常需要处理许多请求, 所有请求都是从不同的客户端发出的, 示例如图: (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
