从异步函数调用的同步函数中调用异步函数的问题
解决同步函数调用异步函数并获取结果的问题
你的核心问题是同步函数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())
关键说明
- 获取当前事件循环:用
asyncio.get_running_loop()获取asyncio.run(A())启动的事件循环,确保和A使用同一个循环。 - 同步执行异步协程:
loop.run_until_complete(coro)会阻塞当前线程,直到传入的协程执行完毕并返回结果,完美适配同步函数调用异步函数的场景。 - 错误原因分析:你之前尝试的
asyncio.create_task和asyncio.wait_for都是异步API——create_task需要在异步上下文(async函数内)调用,wait_for必须配合await使用,同步函数中直接调用这些方法会导致协程从未被调度执行,自然拿不到结果。
内容的提问来源于stack exchange,提问作者graille
相关产品推荐
相关产品推荐

