新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/29 2:16:26来源:尧图网络
排查 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

相关资讯

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

较早相关资讯

最新相关资讯

CentOS 7 静态路由持久化与策略路由实战指南 2026/9/29 19:53:45

CentOS 7 静态路由持久化与策略路由实战指南

简介:本资源是一份面向Linux系统运维人员与CentOS 7服务器管理员的静态路由配置实战指南,聚焦网络流量精准控制这一核心运维需求,系统解决临时路由添加、查看、删除及永久生效等关键问题。资源为单文件PDF文档(57KB)&a…

阅读更多 →
从手动实践到框架开发:一套可落地的抽象方法论 2026/9/29 19:53:39

从手动实践到框架开发:一套可落地的抽象方法论

“第六章框架开发实战”这个标题,在绝大多数教程里都排在很靠后的位置,很多人在翻开这章之前,已经被前面的基础语法、项目案例折腾得够呛。我刚入行那会儿也以为框架开发是什么高深莫测的魔法,后来自己带项目、给团队做内部培训&a…

阅读更多 →
AI Agent 杂谈:从 LLM 到具身机器人,TaoToken 统一 Key 的配置骨架与验证 2026/9/29 19:53:39

AI Agent 杂谈:从 LLM 到具身机器人,TaoToken 统一 Key 的配置骨架与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
深入剖析IOMMUFD模式下VFIO DMA映射机制与源码实现 2026/9/29 19:53:39

深入剖析IOMMUFD模式下VFIO DMA映射机制与源码实现

分析源码这件事,有时候比看文档更能让人长记性。最近社区里聊 pgvector 源码分析的不少,那是数据库侧把向量映射到索引结构;而在内核侧,决定你虚拟机直通网卡或显卡能不能跑满带宽的,是 VFIO/IOMMUFD 这条链路上的 DMA…

阅读更多 →
IOMMUFD DMA映射机制深度解析:从ioctl到硬件页表 2026/9/29 19:53:39

IOMMUFD DMA映射机制深度解析:从ioctl到硬件页表

1. 从 VFIO 到 IOMMUFD:DMA 映射机制的核心演进老读者应该知道,我这个 VFIO 系列已经写到了第二十一篇,前面花了大量篇幅在讲 VFIO 的容器模型、group 管理、设备直通流程,以及传统VFIO_IOMMU_TYPE1路径下 DMA 映射是怎么通过vfio…

阅读更多 →
Claude Code插件全解析:原理、配置与harness报错排查 2026/9/29 19:53:39

Claude Code插件全解析:原理、配置与harness报错排查

最近好几个星期都在折腾Claude Code的插件体系,说实话,一个harness failed to load plugins就把我磨掉了大半天的耐心。等真把claude-plugins-official这套官方插件的加载、配置、排查流程跑通之后,回头一看,网上相关的资料要么是…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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