feat: cap cmhub image concurrency
This commit is contained in:
+24
@@ -1445,3 +1445,27 @@
|
||||
- 代码:`app/gui/tabs/settings.py` 的返回超时标签读取 `app.ai` 中的 cmhub 超时常量,避免 UI 文案和真实请求等待值分叉。
|
||||
- 文档:同步 `docs/02-requirements.md`、`docs/04-architecture.md`、`docs/06-tasks.md`、`docs/routes.md`、`docs/api.md`、`docs/current-state.md` 和 `docs/ui/tab5-settings.svg`。
|
||||
- 验证:`py -3.10 -m unittest discover -s tests -p "test_gui.py"` 通过(102 tests);`py -3.10 -m unittest discover -s tests -p "test_ai.py"` 通过(24 tests);`python -m ruff check app tests main.py` 通过;`py -3.10 -m compileall app main.py` 通过;`py -3.10 -m unittest discover -s tests` 通过(234 tests)。
|
||||
|
||||
## 【2026-07-07】cmhub 生图链路增加分段耗时日志
|
||||
|
||||
- 背景:用户观察到 cmhub 后台单条生成时间小于 200 秒,但本地整轮用时接近 8 分钟;需要区分慢在 cmhub 生成、image_url 下载、本地 JPEG 保存还是 DB 写入。
|
||||
- 代码:`app/ai.py` 在 cmhub 生图成功链路新增三类事件:`cover_request` 成功时记录“cmhub 已返回 image_url”和请求耗时;`cover_download` 成功时记录下载字节数和下载耗时;`cover_save` 成功时记录 JPEG 保存耗时和保存后文件大小。失败时当前 step 会切到 `cover_download` 或 `cover_save`,便于错误归因。
|
||||
- GUI:`app/gui/workers.py` 将上述事件写入②AI生成运行日志和 SQLite `run_log_events`,不记录完整 image_url、prompt、base64、API Key、Cookie 或 token。
|
||||
- 文档:同步 `docs/current-state.md`。
|
||||
- 验证:`py -3.10 -m unittest discover -s tests -p "test_ai.py"` 通过(24 tests);`py -3.10 -m unittest discover -s tests -p "test_gui.py"` 通过(102 tests);`python -m ruff check app tests main.py` 通过;`py -3.10 -m compileall app main.py` 通过;`py -3.10 -m unittest discover -s tests` 通过(234 tests)。
|
||||
|
||||
## 【2026-07-07】T-545 文档 · cmhub 生图和下载并发上限 5
|
||||
|
||||
- 背景:分段日志确认慢点主要在 cmhub `image_url` PNG 下载链路;10 图片并发时 1.6~2.1MB 下载耗时 24~185 秒,并出现下载连接失败。若每个生图线程同时负责等待 cmhub、下载、转 JPEG 和保存,慢下载会占住生图线程。
|
||||
- 方案:新增 T-545。cmhub 模式下实际生图请求并发 = `min(ai.image_concurrency, 5)`;拿到 `image_url` 后交给独立下载/保存线程池;下载线程数与实际生图请求并发一致,同样最大 5;不新增用户可见下载并发配置。②运行日志必须显示用户设置图片并发、cmhub 实际生图并发和下载并发。
|
||||
- 边界:下载失败可在下载层安全重试或记失败,但不得重新调用 cmhub 生图接口造成重复扣点;`cover_done/generated_done` 必须等下载保存成功并写库后才计数;direct 兼容路径暂不改变。
|
||||
- 文档:同步 `docs/02-requirements.md`、`docs/04-architecture.md`、`docs/cmhub-integration-design.md`、`docs/api.md`、`docs/routes.md`、`docs/06-tasks.md` 和 `docs/current-state.md`;本轮只更新文档,未改代码。
|
||||
|
||||
## 【2026-07-07】T-545 · cmhub 生图和下载并发上限 5 + 独立下载线程池
|
||||
|
||||
- 代码:`app/ai.py` 新增 `cmhub_image_concurrency_plan()`,cmhub 生图实际请求并发限制为 `min(ai.image_concurrency, 5)`;把 cmhub 封面生成拆成 `_request_cmhub_cover_image()` 和 `_download_and_save_cmhub_cover()` 两段,`generate_batch()` 在 cmhub 模式下使用独立请求线程池和下载/保存线程池,direct 兼容路径保持原 `image_concurrency` 语义。
|
||||
- 边界:拿到 `image_url` 后即交给下载池,下载失败只标记该任务失败,不重新调用 cmhub 生图接口;`cover_done/generated_done` 仍在图片下载保存成功并写 DB 后才计数;停止时取消未开始的请求,已拿到 `image_url` 的下载保存允许自然完成或失败,避免丢掉已生成结果。
|
||||
- GUI:`app/gui/workers.py` 的②开始日志在 cmhub 模式显示“图片并发 X,cmhub实际生图并发 Y,下载并发 Y”,其中 `Y=min(X,5)`;继续保留“cmhub 已返回 image_url / 下载完成 / 本地保存完成”的分段耗时日志。
|
||||
- 测试:`tests/test_ai.py` 覆盖并发计划、下载慢不阻塞后续 cmhub 生图请求提交、下载失败不重复请求 cmhub 生图;`tests/test_gui.py` 覆盖开始日志中的实际并发展示,并把 direct/mock 路径测试明确指定为 direct backend。
|
||||
- 文档:`docs/06-tasks.md` 将 T-545 标为 DONE;同步 `docs/04-architecture.md`、`docs/cmhub-integration-design.md`、`docs/api.md`、`docs/routes.md` 和 `docs/current-state.md`。
|
||||
- 验证:`py -3.10 -m unittest discover -s tests -p "test_ai.py"` 通过(27 tests);`py -3.10 -m unittest discover -s tests -p "test_gui.py"` 通过(102 tests);`python -m ruff check app tests main.py` 通过;`py -3.10 -m compileall app main.py` 通过;`git diff --check` 通过;`py -3.10 -m unittest discover -s tests` 通过(237 tests)。
|
||||
|
||||
Reference in New Issue
Block a user