2026-04-10
添加了并发任务限制机制,当系统中有5个或更多图片生成任务正在执行时,新的生成请求将被拒绝。
修改位置: /api/generate 路由(第338-360行)
主要变更:
- 在增加并发计数器之前,先检查当前并发数量
- 如果
generating_count >= 5,返回 HTTP 429 错误 - 错误信息包含当前任务数量和最大限制提示
代码片段:
# 检查当前正在生成的任务数量
global generating_count
with count_lock:
current_count = generating_count
if current_count >= 5:
return jsonify({
"success": False,
"error": f"当前已有 {current_count} 个任务正在生成中,请稍后再试(最多允许5个并发任务)"
}), 429
# 增加并发计数
generating_count += 1修改位置:
- 状态面板显示(第1150-1157行)
- 定期更新函数(第1224行)
- 错误处理逻辑(第1308-1316行)
主要变更:
- 在显示并发任务数量时添加"(最多允许5个并发任务)"提示
- 优化429错误的用户提示信息
- 添加重试建议
代码片段:
// 状态显示
genDiv.innerHTML = `<span style="color: #856404;">🔄 当前有 <strong>${count}</strong> 个任务正在生成中... (最多允许5个并发任务)</span>`;
// 错误处理
if (response.status === 429) {
alert('生成失败: ' + result.error + '\n\n提示: 您可以稍等片刻后再次尝试生成。');
}修改位置: API 接口文档部分(第184-217行)
主要变更:
- 在
/api/generate接口说明中添加并发限制注意事项 - 添加成功响应和并发限制响应的示例
完整的功能文档,包含:
- 功能概述
- 技术实现细节
- API 接口说明
- 用户体验设计
- 测试方法
- 配置说明
- 未来改进方向
自动化测试脚本,用于验证并发限制功能:
- 同时发送6个并发请求
- 统计成功和被拒绝的请求
- 验证功能是否正常工作
- 使用
threading.Lock()确保并发计数的原子性操作 - 在
finally块中减少计数器,确保异常情况下也能正确清理
- 使用 429 (Too Many Requests) 状态码
- 符合 RESTful API 设计规范
- 实时显示当前并发任务数量
- 清晰的错误提示和重试建议
- 黄色警告框提醒用户系统负载
- 启动服务器:
python src/app.py - 快速连续点击"生成图片"按钮6次
- 前5次应该正常开始生成
- 第6次应该收到错误提示
python test_concurrent_limit.py预期结果:
- 5个请求成功或被接受
- 1个请求被拒绝(429状态码)
- ✅ 防止系统过载
- ✅ 提高系统稳定性
- ✅ 改善资源分配
- ✅ 提供更清晰的用户反馈
⚠️ 高并发场景下部分请求会被拒绝⚠️ 用户可能需要等待更长时间
-
配置化限制值
- 从 config.json 读取并发限制
- 允许管理员动态调整
-
队列机制
- 超出的请求进入等待队列
- 按顺序自动处理
-
用户级限制
- 为不同用户设置不同的并发限制
- 基于用户ID进行独立计数
-
智能提示
- 显示预计等待时间
- 提供队列位置信息
- ✅ 向后兼容:现有功能不受影响
- ✅ API 兼容:只添加了新的错误情况
- ✅ 前端兼容:优雅降级处理