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

PyInstaller打包的TeleBot程序运行1周后出现Telegram传输错误问题

根因判定

该问题与Telegram API限制无关,属于PyInstaller打包后程序底层网络资源泄漏导致的系统级错误。

报错逻辑拆解

两个报错的底层诱因一致,只是不同模块的上层抛出形式有区别:

  • 使用python-telegram-bot模块的urllib3 HTTPError [Errno 2] No such file or directory:
    本质是进程累计打开的文件描述符耗尽,系统无法为新的网络请求分配套接字资源(套接字在操作系统中以文件描述符形式管理),urllib3创建连接失败抛出该错误。
    对应调用代码:
    bot = telebot.TeleBot(bot_api, parse_mode=None)
    bot.send_message(channel_id, t)
    
  • 使用telebot模块的'OSError' object has no attribute 'result_json':
    底层同样是文件描述符耗尽导致的OSError,telebot模块错误地将异常对象当成了API响应对象,尝试读取result_json属性时抛出该派生错误。
    对应调用代码:
    bot = telegram.Bot(token=bot_api)
    bot.sendMessage(chat_id=channel_id, text=t)
    
固定7天触发的原因

你使用的PyInstaller 4.3版本与Python 3.9.5搭配时,urllib3的连接池复用逻辑存在打包适配bug:超时闲置的连接没有正确释放对应的文件描述符,每次网络请求都会泄漏少量描述符,累计运行7天后刚好触达单个进程的文件描述符上限,因此会固定周期报错,和消息发送总次数无关。

修复方案
  • 临时规避:添加定时任务,每24小时自动重启一次机器人进程,主动释放所有占用的系统资源
  • 代码层面修复:每次调用消息发送接口后手动清理闲置连接,python-telegram-bot模块调用bot.session.close(),telebot模块调用bot._request._conn_pool.clear()
  • 根本修复:将PyInstaller升级到5.0+版本,同时将urllib3升级到1.26.10+版本,该版本已修复打包场景下的文件描述符泄漏问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 20:36:03