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

从异步函数调用的同步函数中调用异步函数的问题

解决同步函数调用异步函数并获取结果的问题

你的核心问题是同步函数B需要在同一个事件循环中调用异步函数C并获取返回结果,之前的尝试错误在于误用了异步API(asyncio.wait_for是异步函数,必须在async函数内用await调用),以下是正确实现方案:

正确代码示例

import asyncio

async def A():
    B()

async def C():
    # 示例逻辑,替换为你的实际代码
    await asyncio.sleep(1)
    return "C的执行结果"

def B():
    # do stuff
    # 获取当前正在运行的事件循环
    loop = asyncio.get_running_loop()
    # 阻塞直到C执行完成并获取结果
    result = loop.run_until_complete(C())
    # 存储或使用结果
    print(f"获取到C的结果:{result}")

asyncio.run(A())

关键说明

  1. 获取当前事件循环:用asyncio.get_running_loop()获取asyncio.run(A())启动的事件循环,确保和A使用同一个循环。
  2. 同步执行异步协程:loop.run_until_complete(coro)会阻塞当前线程,直到传入的协程执行完毕并返回结果,完美适配同步函数调用异步函数的场景。
  3. 错误原因分析:你之前尝试的asyncio.create_task和asyncio.wait_for都是异步API——create_task需要在异步上下文(async函数内)调用,wait_for必须配合await使用,同步函数中直接调用这些方法会导致协程从未被调度执行,自然拿不到结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:11:50