You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无await语句的Python async函数执行特性与性能问题问询

问题解答

1. 表述正确性判断

本身不含await语句的Python async函数,即便被await调用,也不会将执行权交给其他async函数。

这个表述正确。

Python异步IO基于协作式多任务机制,协程只有在遇到await、async for、async with这类明确的挂起点时,才会主动把执行权交还给事件循环,让其他协程获得运行机会。如果一个async函数内部没有任何这类挂起点,那么当它被await调用时,会从头到尾同步执行,全程占据事件循环,期间不会触发任何协程切换。

以你提供的FastAPI代码为例:no_await函数内部调用的是同步库方法,没有await语句,当root端点调用await no_await()时,这段代码会阻塞事件循环,直到同步方法执行完毕,其他异步端点的请求只能排队等待,无法被调度执行。

2. 推论成立性判断

定义不含await语句的async函数,相比以同步方式使用该函数,不会带来任何性能提升。

这个推论成立,甚至可能出现性能下降。

原因有两点:

  • 额外的调度开销:async函数会被包装成协程对象,事件循环对其调度、管理本身就存在额外的性能成本,而直接调用同步函数没有这部分开销。
  • 阻塞事件循环风险:在FastAPI这类异步框架中,若使用无await的async端点,同步代码会直接阻塞整个事件循环,导致服务并发能力下降;而使用def定义的同步端点,框架会自动将其放入线程池执行,不会阻塞事件循环,反而能更好地处理并发请求。

综上,无await的async函数不仅无法利用异步编程的优势,还可能带来额外开销和并发问题,性能表现不如直接使用同步函数。

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:02:38