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

Python同步与asyncio异步编程疑问:为何写法1未并行执行?

Python同步与asyncio异步编程对比:你的疑问解答

场景回顾

作为机器学习工程师,你模拟的服务逻辑有明确要求:

  • preprocess必须优先执行,输出作为predict和apply_business_logic的输入
  • predict与apply_business_logic相互独立,理论上异步执行能提升效率
  • 最终通过加权平均两者输出得到结果

下面针对你的疑问逐一解答:


1. 同步执行与写法2的差异是什么?

先明确两种写法的核心逻辑:

  • 同步代码:所有函数都是普通阻塞函数,执行时会占用线程直到完成,CPU在函数运行期间无法处理其他任务(比如time.sleep会直接卡住线程)。
  • 写法2(伪异步):函数用async定义为协程,调用时用await,但因为是顺序await(先等predict完成再启动apply_business_logic),所以执行流程和同步完全一致。

两者的差异仅在于底层执行机制:

  • 同步函数的阻塞是强制线程暂停,CPU只能空等;
  • 协程的阻塞是主动让出CPU权限(仅当函数内有IO等待逻辑时,比如asyncio.sleep、异步IO操作),但如果没有其他待执行的协程,让出CPU也没用,整体耗时和同步几乎一样。

如果你的predict和apply_business_logic是CPU密集型任务(比如大量矩阵运算),写法2和同步代码没有效率差异——因为asyncio是单线程模型,CPU密集型协程不会主动让出CPU,依然串行执行。


2. 写法2用了async/await却顺序执行,是不是没实现异步?

是的,写法2没有实现真正的异步并发。

异步并发的核心是同时调度多个协程执行,而写法2只是把同步函数改成了协程,却依然按顺序等待每个协程完成,本质还是串行执行。

举个直观的代码对比:

写法2(伪异步,串行执行)

import asyncio

async def preprocess(data):
    return data

async def predict(data):
    await asyncio.sleep(2)  # 模拟IO/耗时操作
    return 0.8

async def apply_business_logic(data):
    await asyncio.sleep(2)
    return 0.6

async def main():
    processed = await preprocess("raw_data")
    # 顺序await,先等predict完成再执行apply_business_logic
    pred = await predict(processed)
    bl = await apply_business_logic(processed)
    result = 0.7 * pred + 0.3 * bl
    print(result)

asyncio.run(main())  # 总耗时约4秒

正确的异步写法(写法3,并发执行)

async def main():
    processed = await preprocess("raw_data")
    # 同时创建并启动两个协程任务
    task_pred = asyncio.create_task(predict(processed))
    task_bl = asyncio.create_task(apply_business_logic(processed))
    # 等待两个任务都完成
    pred = await task_pred
    bl = await task_bl
    # 或用asyncio.gather简化:pred, bl = await asyncio.gather(predict(processed), apply_business_logic(processed))
    result = 0.7 * pred + 0.3 * bl
    print(result)

asyncio.run(main())  # 总耗时约2秒

只有像写法3这样,通过asyncio.create_task或asyncio.gather同时启动多个协程,才能让predict和apply_business_logic并发执行,真正发挥异步的效率优势。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:02:39