问题背景
在复核当前 main、现有 issue 以及任务执行链路时,发现除已报告的单点问题外,还存在一组会共同影响无人值守运行可靠性的缺陷:
未开放章节的重试次数没有正确递增,可能持续重新入队,对应 [BUG反馈]重复判断未开放章节“该章节未开放” #612 的重复日志现象。
worker 处理章节时若抛出异常,队列 accounting 可能无法完成,主线程会永久等待。
显式指定课程 ID 但没有匹配项时,旧逻辑会退化为处理全部课程,存在误操作风险。
章节 HTTP 异常、登录页、空解析、直播提交失败和重试耗尽等结果没有完整向上传播,最终仍可能提示“所有课程学习任务已完成”。
SessionManager.get_session() 会重复初始化 requests.Session,运行过程中更新的 Cookie 和连接池可能丢失。
调度器依赖 Python 3.13 的 Queue.shutdown(),与项目原有 Python 3.10+ 使用场景不兼容,对应 [BUG反馈] 无法从queue中导入ShutDown #541 。
这些问题通常不会表现为单一堆栈错误,而会表现为任务卡死、重复执行、选课范围扩大或失败误报成功。
建议方案
使用明确的剩余任务计数和条件变量管理 worker 生命周期,并确保异常路径也会完成本次任务 accounting。
为未开放章节和普通失败设置有界重试,耗尽后返回失败状态。
将章节、课程和主程序的执行结果逐层汇总,存在未完成任务时不得发送成功通知。
显式课程列表无匹配项时直接中止;仅在用户明确输入 * 时选择全部课程。
在进程内稳定复用同一个 Session,保留 Cookie 和连接池。
移除 Python 3.13 专属 API,恢复 Python 3.10+ 兼容性。
为队列异常、课程筛选、直播失败、Session 生命周期和失败传播增加离线回归测试。
相关问题
我已基于上述方案整理了一份实现,并完成 Python 3.10、Python 3.13、Ruff、PyInstaller 和 Windows 构建验证,将另行提交 PR 供维护者审阅。
暂不纳入本次修复的内容
#597 、#568 以及验证码相关问题仍缺少可稳定复现的脱敏 HTML/JSON 样例。本次不会通过猜测平台响应字段来判断完成状态,建议后续先补充 fixture,再实现三态解析和请求重放。
问题背景
在复核当前
main、现有 issue 以及任务执行链路时,发现除已报告的单点问题外,还存在一组会共同影响无人值守运行可靠性的缺陷:SessionManager.get_session()会重复初始化requests.Session,运行过程中更新的 Cookie 和连接池可能丢失。Queue.shutdown(),与项目原有 Python 3.10+ 使用场景不兼容,对应 [BUG反馈] 无法从queue中导入ShutDown #541。这些问题通常不会表现为单一堆栈错误,而会表现为任务卡死、重复执行、选课范围扩大或失败误报成功。
建议方案
*时选择全部课程。相关问题
我已基于上述方案整理了一份实现,并完成 Python 3.10、Python 3.13、Ruff、PyInstaller 和 Windows 构建验证,将另行提交 PR 供维护者审阅。
暂不纳入本次修复的内容
#597、#568 以及验证码相关问题仍缺少可稳定复现的脱敏 HTML/JSON 样例。本次不会通过猜测平台响应字段来判断完成状态,建议后续先补充 fixture,再实现三态解析和请求重放。