如何搭配多线程使用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
相关产品推荐
相关产品推荐

