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

如何让Python异步函数等待WebSocket操作完成后再执行后续代码?

解决方案

首先明确:异步函数无论是否有返回值,都可以通过await关键字等待其执行完成,你提到的"无法对无返回值的异步操作使用标准await"是误解。

针对你的问题,分两种常见场景处理:

场景1:f是标准异步函数(async def定义)

如果f本身是正确实现的异步函数,原代码里的await f(a, b)理论上会等待WebSocket数据发送完成后再执行g。如果实际没生效,大概率是f内部没有正确等待WebSocket的发送操作完成。

比如f若只是调用了WebSocket的send方法但没等确认,需要修改f确保它等待发送流程结束:

async def f(a: str, b: str):
    # 假设ws是你的WebSocket连接对象
    await ws.send(f"{a}-{b}")
    # 若需要等待服务器确认,可添加对应等待逻辑
    # await ws.recv()  # 示例:等待服务器返回的确认消息

此时你的my_func无需修改,原代码的await会正确等待f执行完毕。

场景2:f是普通函数(非async def定义)

如果f是普通函数,内部仅启动了异步任务但未等待,那需要把f改造为异步函数,或者在my_func中等待f启动的异步任务完成。

改造后的示例代码:

# 将f改为异步函数
async def f(a: str, b: str):
    # 实现WebSocket发送的异步逻辑
    await ws.send(f"{a}-{b}")

async def my_func(self, a: str, b: str) -> str:
    await f(a, b)  # 等待f的异步发送操作完成
    out = g(a, b)
    return out

核心结论

只要f是正确实现的异步函数,await f(a, b)就会确保g在f的WebSocket发送操作完成后再执行,和f是否有返回值没有关系。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:53:11