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

Python websockets单次运行建立多少连接?asyncio搭配使用疑问

问题1:每次执行async with websockets.connect(_websocket_uri) as websocket:是否都会创建新连接?

是,每次执行这条语句都会发起一次全新的WebSocket连接请求。async with是异步上下文管理器语法,进入该上下文时会完成TCP握手、WebSocket协议握手建立完整连接,退出上下文时会自动发送断开帧、关闭底层TCP连接,全程不需要手动处理连接生命周期。

问题2:你当前的代码是否满足「每个URI全程仅建立一次连接」的要求?

满足。
你的代码逻辑中:

  • connect_to_single_uri调用connect建立连接后,会直接await fetch_data(connected_websocket)
  • fetch_data中用async for message in _websocket迭代接收服务端消息,只要连接没有因为网络波动、服务端主动断开、程序报错等异常终止,这个迭代过程就会持续运行,不会退出async with上下文,也就不会重复触发连接创建逻辑
  • 外层connect_to_streams是给集合中的每一个URI创建独立的协程任务并行运行,每个URI对应一个长期存活的连接,不会产生重复连接

问题3:该语句的调用频率应该控制在多少?

只要连接处于正常存活状态,完全不需要重复调用该语句。只有当连接断开后你需要重连时,才需要再次执行该语句。

如果需要实现断线自动重连,可以参考以下方式修改connect_to_single_uri,避免连接中断后程序退出,同时控制重连频率防止被服务端封禁:

async def connect_to_single_uri(_connection_uri: str) -> None:
    while True:
        try:
            async with websockets.connect(_connection_uri, max_queue=None) as connected_websocket:
                await fetch_data(connected_websocket)
        except (websockets.exceptions.ConnectionClosed, OSError):
            # 连接断开后等待2秒再重连,可根据服务端规则调整间隔
            await asyncio.sleep(2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:27:01