树莓派4重装RPIos lite后APScheduler报interpreter shutdown错误
问题原因
- 核心原因是你的
temperaturelog.py脚本主线程执行完所有代码后直接退出,Python解释器随之关闭。你初始化的BackgroundScheduler是守护线程,会随主线程一同销毁,调度器尝试提交下一次定时任务时就会触发cannot schedule new futures after interpreter shutdown报错。 - 之前系统能正常运行大概率是旧版APScheduler的线程行为不同、或者之前运行脚本时额外加了阻塞逻辑,重装系统后环境变动导致问题暴露。
- 额外冗余问题:你重复添加了12条定时任务,完全不需要这么写,每5分钟执行只要1条规则就够了,重复添加只会导致同一个时间点多次执行相同逻辑,浪费系统资源。
解决步骤
- 给主线程添加阻塞逻辑,在
sched.start()之后加入以下代码,防止主线程退出:
# 阻塞主线程,避免脚本直接退出 while True: time.sleep(2)
- 删除多余的定时任务配置,只保留1条每5分钟执行的规则即可:
# 删掉原来的12条add_job配置,只留这一条就能实现每5分钟执行一次的需求 sched.add_job(saveTempDate, trigger="cron", minute="*/5")
- 可选优化:
dht.py中读写temp、hum全局变量时建议加线程锁,避免同时读写出现脏数据,不过这个不是本次报错的原因。
验证方法
修改后直接运行python3 temperaturelog.py,不要加后台运行参数,看是否还会出现报错,正常情况下会持续运行,每隔5分钟输出一次saving...日志。如果需要后台长期运行,建议配置systemd服务托管,稳定性比nohup更好。
内容的提问来源于stack exchange,提问作者Manolol
相关产品推荐
相关产品推荐

