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

如何搭配多线程使用websockets库运行WebSocket服务

问题根因

你代码中的loop.run_until_complete(ws_server)仅会等待WebSocket服务实例创建完成,执行完成后事件循环就会直接退出,没有持续运行监听连接的逻辑,因此客户端无法成功连接。

修正后的代码

import asyncio
import threading
import websockets

async def hello(websocket, path):
    while True:
        data = await websocket.recv()
        print(data)
        await websocket.send(data)


def between_callback():
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    # 启动WebSocket服务
    start_server = websockets.serve(hello, '192.168.0.115', 8899)
    loop.run_until_complete(start_server)
    # 让事件循环持续运行,监听连接和消息
    loop.run_forever()

if __name__ == "__main__":
    _thread = threading.Thread(target=between_callback, daemon=True)
    _thread.start()

    # 主线程其他逻辑
    while True:
        # 这里替换成你主线程要执行的内容
        pass

核心修改点

  • 新增loop.run_forever()调用,让子线程的事件循环持续运行,保持WebSocket服务的监听状态
  • 给子线程设置daemon=True,确保主线程退出时子线程会随之销毁,避免进程残留

额外注意事项

如果需要主动停止WebSocket服务,可以在主线程中调用子线程事件循环的stop()方法,跨线程操作事件循环要使用loop.call_soon_threadsafe()接口避免线程安全问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 05:45:05