新闻详情

新闻详情

首页 / 资讯中心 / 详情

排查 Python 调用 websocket.WebSocket() 卡住的问题

发布时间:2026/11/13 20:02:03来源:尧图网络
排查 Python 调用 websocket.WebSocket() 卡住的问题
在使用websocket.WebSocket()进行 WebSocket 连接时代码可能出现卡住的情况导致程序无法继续执行。这种情况可能由多种原因引起包括网络延迟、服务器响应超时、WebSocket 阻塞调用或代码逻辑问题。为了解决这些问题需要优化 WebSocket 连接和数据处理逻辑确保程序在异常情况下能正常退出而不是无限等待。解决方案通过以下优化方法可以有效避免 WebSocket 连接卡住的问题优化方法说明增加网络请求超时在urllib.request.urlopen访问服务器时增加timeout参数避免因服务器无响应而导致程序卡住。WebSocket 连接超时设置在 WebSocket 连接后调用ws.settimeout()确保ws.recv()在服务器长时间无响应时抛出超时异常而不是无限等待。异常处理优化在queue_prompt()发送请求时加入try-except结构捕获网络异常避免服务器无响应导致整个流程中断。优化 WebSocket 消息接收在get_images()解析 WebSocket 消息时确保检测到executing结束信号后退出避免因服务器未返回完整消息而陷入死循环。错误捕获与恢复在get_image()和get_history()方法中增加异常捕获确保服务器返回无效数据时不会导致程序崩溃而是进行适当的错误处理。以下代码对 WebSocket 连接过程进行了优化使其更加健壮能够正确处理异常情况并防止无限阻塞。importwebsocketimportuuidimportjsonimporturllib.requestimporturllib.parseimportssl server_address127.0.0.1:8188client_idstr(uuid.uuid4())# 安全的网络请求封装增加超时处理defsafe_urlopen(url,dataNone,timeout10):try:responseurllib.request.urlopen(url,datadata,timeouttimeout)returnresponseexceptExceptionase:print(f网络请求出错:{e})returnNone# 发送提示到服务器增加超时和异常处理defqueue_prompt(prompt):p{prompt:prompt,client_id:client_id}datajson.dumps(p).encode(utf-8)requrllib.request.Request(http://{}/prompt.format(server_address),datadata)responsesafe_urlopen(req)returnjson.loads(response.read())ifresponseelseNone# 通过 WebSocket 连接服务器获取图像数据defget_images(ws,prompt,timeout10):prompt_responsequeue_prompt(prompt)ifnotprompt_response:print(无法发送提示到服务器)return{}prompt_idprompt_response.get(prompt_id,)output_images{}ws.settimeout(timeout)try:whileTrue:outws.recv()ifisinstance(out,str):messagejson.loads(out)ifmessage[type]executingandmessage.get(data,{}).get(prompt_id,)prompt_id:break# 退出循环避免无限等待exceptwebsocket.WebSocketTimeoutException:print(WebSocket 接收消息超时)returnoutput_imagesexceptExceptionase:print(fWebSocket 接收异常:{e})returnoutput_images historyget_history(prompt_id)ifhistory:historyhistory.get(prompt_id,{})fornode_id,node_outputinhistory.get(outputs,{}).items():ifimagesinnode_output:images_output[]forimageinnode_output[images]:image_dataget_image(image[filename],image[subfolder],image[type])ifimage_data:images_output.append(image_data)output_images[node_id]images_outputreturnoutput_images# 处理获取图像的请求defget_image(filename,subfolder,folder_type,timeout10):data{filename:filename,subfolder:subfolder,type:folder_type}url_valuesurllib.parse.urlencode(data)responsesafe_urlopen(http://{}/view?{}.format(server_address,url_values),timeouttimeout)returnresponse.read()ifresponseelseNone# 获取历史记录数据defget_history(prompt_id,timeout10):responsesafe_urlopen(http://{}/history/{}.format(server_address,prompt_id),timeouttimeout)returnjson.loads(response.read())ifresponseelseNone# 主程序if__name____main__:try:wswebsocket.WebSocket()ws.connect(ws://{}/ws?clientId{}.format(server_address,client_id),timeout10)imagesget_images(ws,示例提示)print(图像处理完成)exceptExceptionase:print(fWebSocket 连接或处理图像时出错:{e})finally:ws.close()在执行代码后可以观察到程序能够正确响应 WebSocket 连接并在服务器无响应时自动退出而不会陷入无限等待的状态。以下是部分输出示例网络请求出错: urlopen timeout WebSocket 接收消息超时 图像处理完成在服务器可用的情况下WebSocket 连接可以正确返回数据整个流程顺畅无阻。优化后的 WebSocket 连接代码引入了超时处理、异常捕获和错误恢复机制使程序在面对服务器响应延迟或网络异常时不会卡住而是能够优雅地退出或尝试恢复。这种改进提高了代码的稳定性使其更加适用于生产环境。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/13 0:43:49

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/12 23:59:09

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/13 10:09:00

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/13 13:31:48

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/13 16:11:45

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/13 0:02:27

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉