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.
6c7f8f589e1fecaf17190b5747dfda99eeb94f54
web/routers/account.py 的音质探测单飞锁原本是 core.state 里的 threading.Lock, 在协程里用 `await asyncio.to_thread(lock.acquire, True, 0.5)` 做有界等待,每次 VIP 请求都白付一次线程池调度。 为什么可以直接换:这把锁**只在协程里用**。原注释写「与 core.state 中同一把锁 共享」,但 grep 全仓只有 _detect_vip 一个消费者(sync 时代另有一个线程侧使用者, 早已不存在)。改为 asyncio.Lock + asyncio.wait_for(acquire(), 0.5),超时分支用 `except TimeoutError` 走「不等 8 级探测、直接用账号接口降级」的原有语义。 顺带把锁从 core.state 移出:core.state 自己声明「依赖仅限标准库 threading/collections」,而这把锁是 asyncio 的。现在它跟着唯一消费者走。 锁按事件循环隔离(以 id(loop) 为键):asyncio.Lock 绑定创建它的 loop,应用主 loop 与测试各自的 loop 并存,跨 loop 复用会抛 "bound to a different event loop" (B2 迁移 auth_system 时踩过同一个坑)。 门禁:ruff 全过 / pyright 0-0-0 / pytest 382 项全绿(0 失败)。
Languages
Python
61%
TypeScript
32.2%
CSS
6.6%
Dockerfile
0.1%