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

部署复刻自Github的Telegram Bot到Heroku遇RuntimeError求助

解决Heroku部署Telegram Bot时的RuntimeError问题

错误原因

该错误是由于Python解释器即将关闭时,pymongo的周期性执行器仍尝试创建新线程,导致线程创建与解释器退出的冲突。通常是因为程序未正确处理MongoDB连接的关闭,或未响应Heroku的进程退出信号。

解决方法

  • 显式关闭MongoDB连接:在程序退出逻辑中主动关闭MongoDB客户端实例,避免后台线程继续运行:
    # 假设client是你的pymongo.MongoClient对象
    client.close()
    
  • 捕获退出信号并清理资源:监听Heroku发送的SIGTERM和SIGINT信号,在收到信号时先关闭连接、停止Bot运行再退出:
    import signal
    import sys
    from telegram.ext import Updater  # 根据你使用的Bot库调整
    
    def cleanup_and_exit(signal_num, frame):
        # 关闭MongoDB连接
        client.close()
        # 停止Telegram Bot的运行(以python-telegram-bot为例)
        updater.stop()
        sys.exit(0)
    
    # 注册信号处理函数
    signal.signal(signal.SIGTERM, cleanup_and_exit)
    signal.signal(signal.SIGINT, cleanup_and_exit)
    
  • 降级pymongo版本:Python 3.12对线程创建时机的限制更严格,尝试指定兼容的pymongo版本到requirements.txt:
    pymongo<4.6
    
  • 确认Heroku启动命令:确保Procfile中的启动命令能让Bot持续运行,而非执行后立即退出。例如:
    web: python bot.py
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:26:24