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

连接中断后通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:12:06