audio2text dev
2f68c7e1f8
fix: 并发上传5文件刷新后丢失 + 分片写入阻塞事件循环
根因:
1. pump() 仅在 addFiles() 调用一次,上传完成/失败后不重新触发,
导致 CONCURRENCY=3 之后的文件(4、5)永远不启动 → 无 DB 会话 → 刷新后消失
2. write_chunk 的 uploaded_chunks 是 read-modify-write,并发分片写入
后者覆盖前者 → 分片记录丢失 → complete 报 409
3. upload_chunk 是 async 但同步调 write_chunk(fsync+DB commit),
阻塞 uvicorn 事件循环 → 所有 web 请求被串行化
修复:
- _shared.py: pump() 加 finally 块,上传完成/失败后都触发下一文件;
文件并发(FILE_CONCURRENCY=5)与分片并发(CHUNK_CONCURRENCY=3)分离
- upload_service.py: 按 upload_id 的进程级锁串行化 uploaded_chunks 更新,
持锁后 db.refresh 重读最新值再 append,杜绝丢失更新;complete 后清理锁
- upload_router.py: upload_chunk 的 write_chunk 调用改用 run_in_threadpool,
阻塞 I/O 移出事件循环,web 请求不再被分片写入阻塞
验证:5 文件并发上传后刷新全部可见;4 任务并发处理 4/4 成功(19.2s)
2026-07-06 22:04:06 +08:00
..
2026-07-06 06:54:19 +00:00
2026-07-06 21:59:59 +08:00
2026-07-06 06:54:19 +00:00
2026-07-06 06:54:19 +00:00
2026-07-06 06:54:19 +00:00
2026-07-06 21:59:59 +08:00
2026-07-06 21:59:59 +08:00
2026-07-06 06:54:19 +00:00
2026-07-06 21:59:59 +08:00
2026-07-06 06:54:19 +00:00
2026-07-06 06:54:19 +00:00
2026-07-06 21:59:59 +08:00
2026-07-06 06:54:19 +00:00
2026-07-06 22:04:06 +08:00