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

不等待调用async函数是否会阻塞?如何无等待执行非阻塞代码?

异步函数无等待调用的问题解答

1. 不关注返回结果时,是否仍需使用await?

不用。但直接调用异步函数却不加await的话,函数不会实际执行,只会返回一个协程对象,这个对象会被闲置,除非你通过事件循环去调度它运行。

举个Python的例子:

async def do_something():
    # 模拟耗时IO操作
    await asyncio.sleep(2)
    print("操作完成")

# 直接调用仅得到协程对象,函数内容不会执行
do_something()

这种情况下,do_something里的代码根本不会运行,更谈不上非阻塞执行。

2. 无需等待即可执行非阻塞代码的方法

如果你想让异步函数在后台执行、不阻塞当前线程,同时不用等待它的结果,可以通过事件循环的任务调度方法实现:

方法:用asyncio.create_task()(Python 3.7+)

把协程包装成任务,事件循环会自动在后台调度执行,当前代码可以继续往下走,完全不阻塞。

import asyncio

async def do_something():
    await asyncio.sleep(2)
    print("后台操作完成")

async def main():
    # 将协程转为任务,丢给事件循环后台执行
    asyncio.create_task(do_something())
    print("当前代码继续执行,不等待后台任务")
    await asyncio.sleep(3)  # 留足够时间让后台任务完成

asyncio.run(main())

运行后会先打印"当前代码继续执行...",2秒后打印"后台操作完成",3秒后程序结束。

注意点

  • 如果程序在后台任务完成前就退出,任务会被直接终止,所以要确保事件循环在任务运行期间保持活跃。
  • 若任务抛出未被捕获的异常,程序退出时会默认打印异常信息,你也可以给任务添加回调来处理异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:40:24