更新内容: - 编写《并发控制》详细文档,说明任务并发限制的配置、使用和最佳实践。 - 完成《并发控制实现总结》文档,记录设计决策和开发细节。 - 添加《并发控制快速参考》文档,提供配置和常见问题的快速解决方案。
1.8 KiB
1.8 KiB
并发控制快速参考
配置
# 设置最大并发数(默认 10)
export MAX_CONCURRENT_JOBS=20
API
查询并发状态
GET /jobs/concurrency/status
响应:
{
"max_concurrent": 10, // 最大并发数
"available_slots": 7, // 可用槽位
"running_jobs": 3 // 运行中任务数
}
代码示例
在 JobManager 中使用
# 并发控制自动生效,无需额外代码
job_manager = await get_job_manager()
job_id = await job_manager.create_job(...)
# 任务会自动排队,等待可用槽位
asyncio.create_task(job_manager.execute_job(job_id))
查询并发状态
job_manager = await get_job_manager()
status = job_manager.get_concurrency_status()
print(f"运行中: {status['running_jobs']}/{status['max_concurrent']}")
print(f"可用槽位: {status['available_slots']}")
监控
实时监控
# 持续监控并发状态
watch -n 1 'curl -s http://localhost:8000/jobs/concurrency/status | jq'
测试脚本
# 运行并发控制测试
./scripts/test_concurrency.sh
推荐配置
| 任务类型 | 推荐并发数 |
|---|---|
| CPU 密集型 | 核心数 × 1.5 |
| I/O 密集型 | 核心数 × 5-10 |
| 混合型 | 核心数 × 2-3 |
故障排查
任务一直 pending
# 检查并发状态
curl http://localhost:8000/jobs/concurrency/status
# 如果 available_slots = 0,说明所有槽位被占用
# 解决方案:
# 1. 等待当前任务完成
# 2. 增加并发限制
# 3. 优化算法性能
系统资源耗尽
# 降低并发限制
export MAX_CONCURRENT_JOBS=5
# 重启服务
./scripts/run_dev.sh