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

Python TCP/IP通信脚本提前终止问题排查与解决

Python TCP通信脚本递归转循环解决提前终止问题

我有一个基于TCP/IP协议与其他软件通信的Python脚本,负责接收XML格式数据,原本运行正常。但将模块打包安装到项目环境后,脚本出现无提示的提前终止,且终止发生在to_line递归函数执行过程中(打印消息行时会中途停止)。

递归实现代码:

def to_line(self, message: RecievedMessage):
    sys.setrecursionlimit(10**6)
    if len(self.data[0]) > 0:
        size = ord(self.data[0])
        line = "".join(self.data[4:size + 4]).strip()
        # print(line)
        message.recieved_lines.append(RecievedMessage.RecievedLine(size=size, data=line))
        del self.data[0: size + 4]
        self.to_line(message)
    else:
        return message

我已排查递归限制过低等常见问题(已设置递归深度为10^6),但未发现异常。随后将to_line方法改为循环实现:

循环实现代码:

def to_line(self) -> None:
    while len(self.data[0]) > 0:
        size = ord(self.data[0])
        line = "".join(self.data[4:size + 4]).strip()
        self.message.recieved_lines.append(RecievedMessage.RecievedLine(size=size, data=line))
        del self.data[0: size + 4]

修改后成功解决了脚本提前终止的问题。

问题原因分析

Python递归即使手动设置了较高的递归深度限制,在打包后的模块运行环境中,可能受到解释器实际栈空间、模块加载上下文的限制,导致未达到设置的递归深度就触发静默栈溢出终止。而循环实现不存在栈累积的问题,更适合这种需要持续解析数据流的场景。

内容的提问来源于stack exchange,提问作者Dorus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:02:18