Archived
This repository has been archived on 2026-10-02 . You can view files and clone it. You cannot open issues or pull requests or push a commit.
0b25f215a2b1d759d8b017d4648dfe2b6b42b82a
为什么:d209af8 基线在 main.py:4594 用 threading.Thread(...).start() 启动 _task_monitor_loop;8446166「移除 Flask」把实现搬进 services/runtime.py 时 只搬了函数定义、丢了启动点,6288a98 拆包后落到 services/tasks.py,HEAD 仍 无任何调用方——函数体完好,但一次都没跑过。 后果(自该次迁移起持续失效): - 心跳超时不再暂停离线设备的批量任务,排队名额无法释放 - 离线 >30 分钟 / 运行 >4 小时的任务不再自动取消 - 终态任务记录、tasks/ 孤儿目录、downloads 缓存不再回收 - ledger_recover_orphans 停摆,预扣未退款的账永久悬挂在 open 状态 改法:新增 start_task_monitor(),加锁保证幂等(重复调用返回 False), 在 create_app 的 lifespan 里用 asyncio.to_thread 启动;新增 start_monitor 开关供测试显式关闭。裸 TestClient(app) 不进上下文管理器、不触发 lifespan, 故既有测试不受影响。 验证:pytest 新增 3 例(幂等 / lifespan 启动 / 可跳过);端到端 uvicorn 冒烟 日志出现「任务监控线程已启动」。
Languages
Python
61%
TypeScript
32.2%
CSS
6.6%
Dockerfile
0.1%