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

Python中async里的await与普通执行流程的差异是什么?

Async/Await与普通同步流程的核心差异

核心区别一句话:异步+await是「等待时不浪费时间」,普通同步是「死等到底啥也不干」

从你的场景图拆解

  • 普通同步流程(Normal Program):
    服务员通知厨房做菜后,就原地等着,直到菜做好才能继续干活。这段等待时间里,服务员完全闲置,没法处理其他任务(比如收拾桌子、招呼其他客人),整体效率极低。
  • 异步+await流程(Async Program):
    服务员用await kitchen()等待做菜时,会立刻转而去做其他能并行处理的轻量任务(比如收拾桌子),等厨房完成做菜的信号传来,再回到上菜的流程。等待的时间被充分利用了。

技术层面的本质

  • 同步代码是阻塞执行:调用普通函数kitchen()时,当前线程会被完全占用,必须等函数执行完毕(比如菜做好),才能继续执行后面的代码。
  • Async/Await是非阻塞等待:await会把当前的任务暂时挂起,把线程资源让给其他需要运行的任务;当被await的异步任务(通常是IO密集型操作,比如网络请求、文件读写、数据库查询这类不需要CPU一直运算的任务)完成后,再回到挂起的位置继续执行后续代码。

代码示例对比

同步版本(阻塞)

import time

def kitchen():
    # 模拟做菜耗时5秒(同步阻塞操作)
    time.sleep(5)
    return "番茄炒蛋"

def waiter():
    print("服务员:告知厨房做番茄炒蛋")
    dish = kitchen()  # 这里阻塞5秒,啥也干不了
    print(f"服务员:拿到{dish},给客人上菜")
    print("服务员:收拾客人吃完的桌子")  # 只能等上菜后才执行

waiter()

执行流程:通知做菜 → 等5秒 → 上菜 → 收拾桌子,总耗时约5秒,等待期间无额外工作。

异步版本(非阻塞等待)

import asyncio

async def kitchen():
    # 模拟异步做菜(比如调用后厨系统、等待食材准备这类IO操作)
    await asyncio.sleep(5)
    return "番茄炒蛋"

async def waiter():
    print("服务员:告知厨房做番茄炒蛋")
    # 先启动厨房任务,不立刻等待
    dish_task = asyncio.create_task(kitchen())
    print("服务员:趁做菜的空,先收拾隔壁桌")  # 直接执行,不等待
    # 等厨房做好菜,再继续
    dish = await dish_task
    print(f"服务员:拿到{dish},给客人上菜")

asyncio.run(waiter())

执行流程:通知做菜 → 收拾桌子(同时厨房在做菜) → 上菜,总耗时还是约5秒,但期间完成了额外的收拾桌子工作,整体效率提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:10:36