并发控制
Concurrency Control
请求级并发限制保护GPU等有限资源不被过载
子问题
1.请求并发限制
2.资源保护
3.过载拒绝策略
4.动态并发调整
5.多 Worker 任务队列竞争安全
6.计算进程数自适应与超时强杀
7.GPU 进程级显存隔离
各项目的解法1 solutions
Signals
横向对比
| 维度 | MinerU |
|---|---|
| 并发模型 | 三层控制:Semaphore 门控 + SQLite 原子抢占 + ProcessPool 动态分片 |
| 过载策略 | 快速拒绝 503,不排队不等待 |
| 任务分配 | Pull 模式:Worker 主动轮询 SQLite 队列,BEGIN IMMEDIATE 悲观锁 |
| 资源隔离 | CUDA_VISIBLE_DEVICES 进程级 GPU 隔离 |
| 超时保护 | ProcessPool 全局超时 + SIGTERM→SIGKILL 两阶段强杀 |
| 配置方式 | 环境变量驱动(MINERU_API_MAX_CONCURRENT_REQUESTS) |
最佳实践
1.使用Semaphore实现请求级并发控制并返回503拒绝过载请求
2.先检查 Semaphore._value 再 acquire 实现快速拒绝而非排队等待
3.SQLite BEGIN IMMEDIATE + rowcount 双重校验实现无外部依赖的原子任务分配
4.ProcessPoolExecutor 用 SIGTERM→SIGKILL 两阶段终止防止僵尸进程