feat: cmhub shared Session + connection pool + proxy handling (T-546)
- app/ai.py: 模块级共享 requests.Session + HTTPAdapter 连接池 (CMHUB_HTTP_POOL_SIZE=32);_apply_cmhub_proxy() 切换 trust_env; 生成/下载/models/balance 统一复用该 Session。 - app/appconfig.py: ai.cmhub.use_system_proxy 默认 false(绕过系统代理)。 - tests/test_ai.py: 补 Session 复用/代理/连接池测试;原 18 处 cmhub mock 从模块级 requests 改到共享 Session。 - docs: troubleshooting 加「图片下载很慢」排障节;06-tasks 标 T-546 DONE。 附带:把 app/ai.py 行尾从 CRLF 归一为 LF;并一并纳入工作区中此前未提交、 已在运行构建里的 cmhub 下载诊断代码(调试图片 URL 日志、下载重试事件), 无法与 T-546 在同一文件内拆分单独提交。243 单测全绿。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
b257fb5c83
commit
5a09c6662e
@@ -271,3 +271,35 @@ T-541 已在主窗口启动时读取 `QApplication.primaryScreen().availableGeom
|
||||
- 不保存坏的历史窗口坐标,避免下次继续打开到屏幕外。
|
||||
|
||||
修复后需要在普通桌面和 Windows 10 虚拟机/小分辨率环境各启动一次打包版,确认标题栏完整可见。
|
||||
|
||||
## ② cmhub 图片下载很慢(几十秒~几分钟),而 curl 只需几秒
|
||||
|
||||
### 现象
|
||||
|
||||
② 生图时,日志显示 `cmhub 已返回 image_url` 后,本地「下载完成」耗时几十秒甚至上百秒;用 curl 下载同一个 `image_url`(如 `http://<ip>:8080/generated/images/...png`)只需几秒。
|
||||
|
||||
### 原因
|
||||
|
||||
图片是从 cmhub 的**媒体服务**(常见形如 `http://<公网IP>:8080/...`,明文 HTTP、非标准端口)下载,与生成 API(HTTPS 域名)是不同端点。慢的常见根因两类:
|
||||
|
||||
1. **系统代理**(最常见):`requests` 默认读 `HTTP(S)_PROXY`/`ALL_PROXY` 环境变量,会把明文 HTTP 到 `:8080` 的下载塞进代理;慢/不支持非标端口的代理转发会让下载卡顿,而干净窗口的 curl 直连很快。
|
||||
2. **并发争抢**:多图并发时,同步生成的长连接 + 并发下载挤同一主机,单条下载被拖慢(T-545 已限制生图/下载并发上限 5;T-546 已加共享连接池缓解)。
|
||||
|
||||
### 定位(一条命令区分代理 vs 并发)
|
||||
|
||||
```powershell
|
||||
# curl 直连基准
|
||||
curl -o NUL -w "curl %{time_total}s`n" "<image_url>"
|
||||
# python 关掉代理直连
|
||||
py -3.10 -c "import requests,time; s=requests.Session(); s.trust_env=False; t=time.time(); r=s.get('<image_url>'); print('no-proxy', len(r.content), round(time.time()-t,1),'s')"
|
||||
```
|
||||
|
||||
若 `no-proxy` 明显变快 → 就是代理。
|
||||
|
||||
### 修复(T-546 后)
|
||||
|
||||
cmshopee 的 cmhub 请求默认**绕过系统代理**(`ai.cmhub.use_system_proxy` 默认 `false`),并用共享 `requests.Session` + 连接池减少握手/连接饥饿。
|
||||
|
||||
- 若你的机器**必须走代理**才能上网,编辑 `data/config.json` 把 `ai.cmhub.use_system_proxy` 改为 `true`(注意:慢代理仍可能拖累图片下载)。
|
||||
- 若下载仍慢且 curl 也慢,则是 cmhub **媒体服务器本身慢**(如 Django 直接服媒体、单线程),属服务端问题,需在 cmhub 侧用 nginx/对象存储服 `/generated/images/`。
|
||||
- 调试期可临时把 ⑤「图片并发数」设 1 复测单张,排除并发因素。
|
||||
|
||||
Reference in New Issue
Block a user