连接中断后通过Socket发布数据时Python 2.7报错问题咨询
解决Python 2.7连接Carbon服务器时的Socket 10053错误
嘿,这个问题太常见啦!当运行Carbon服务器的COMPUTER-NAME机器关闭后,你的脚本还在拿着已经失效的socket连接尝试发送数据,自然就会触发[Errno 10053]这个连接中止错误。咱们可以通过添加错误捕获和自动重连逻辑来让脚本更健壮,下面是调整后的完整方案:
核心思路
- 捕获发送数据时的
socket.error异常,识别连接断开的情况 - 断开后关闭旧连接,自动尝试重新连接Carbon服务器
- 给重连逻辑加上重试间隔,避免频繁重试浪费资源
- 确保
time模块被正确导入(原代码里用到了但没显式import,这个细节别漏)
修正后的代码(Python 2.7兼容)
import socket import time CARBON_HOST = 'COMPUTER-NAME' CARBON_PORT = 2003 CARBON_PATH = 'folder.name.measurement' WAIT = 1 # 替换成你原来的WAIT值 RECONNECT_WAIT = 5 # 重连间隔,可根据实际调整 def connect_to_carbon(): """负责建立到Carbon服务器的连接,带重试逻辑""" s = socket.socket() while True: try: s.connect((CARBON_HOST, CARBON_PORT)) print("成功连接到Carbon服务器") return s except socket.error as e: print("连接失败: %s,%d秒后重试..." % (e, RECONNECT_WAIT)) time.sleep(RECONNECT_WAIT) # 初始化连接 s = connect_to_carbon() while True: try: # 这里替换成你从文件获取最新data的实际逻辑 data = "your_measured_value" # 示例数据,仅作占位 # 构造Carbon格式的消息 message = '%s %s %s\n' % (CARBON_PATH, str(data), int(time.time())) s.send(message) time.sleep(WAIT) except socket.error as e: print("发送数据失败: %s,尝试重新连接..." % e) # 关闭失效的连接 s.close() # 重新建立连接 s = connect_to_carbon()
关键改动说明
- 新增
connect_to_carbon函数:封装了连接逻辑,连接失败时会自动重试,直到成功连接为止 - 主循环添加
try-except:捕获发送数据时的socket异常,一旦检测到连接断开,就关闭旧socket并重新连接 - 兼容Python 2.7语法:所有字符串格式化都用
%操作符,避免Python 3的f-string语法报错
这样调整后,就算Carbon服务器临时关闭再重启,你的脚本也能自动恢复连接,不会因为连接断开直接崩溃啦。
内容的提问来源于stack exchange,提问作者SuperCiocia
相关产品推荐
相关产品推荐

