在 /api/generate 路由中添加了并发限制检查:
# 检查当前正在生成的任务数量
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- ✅ 线程安全的并发计数(使用
threading.Lock()) - ✅ 在增加计数器之前进行检查
- ✅ 返回标准的 HTTP 429 状态码
- ✅ 清晰的错误提示信息
- ✅ 在
finally块中确保计数器正确减少
a) 状态面板显示优化
genDiv.innerHTML = `<span style="color: #856404;">🔄 当前有 <strong>${count}</strong> 个任务正在生成中... (最多允许5个并发任务)</span>`;b) 错误处理优化
if (response.status === 429) {
alert('生成失败: ' + result.error + '\n\n提示: 您可以稍等片刻后再次尝试生成。');
}- ✅ 实时显示当前并发任务数量(每5秒更新)
- ✅ 明确标注最大并发限制
- ✅ 友好的错误提示和重试建议
- ✅ 黄色警告框提醒用户系统负载
- 在 API 文档中添加了并发限制说明
- 提供了成功和失败响应的示例
-
docs/CONCURRENT_LIMIT_FEATURE.md - 完整的功能文档
- 技术实现细节
- API 接口说明
- 用户体验设计
- 测试方法
- 配置说明
- 未来改进方向
-
docs/CONCURRENT_LIMIT_UPDATE.md - 更新摘要
- 修改文件清单
- 代码变更对比
- 测试方法
- 影响范围分析
-
docs/CONCURRENT_LIMIT_QUICK_REF.md - 快速参考
- 核心功能概述
- 查看负载方法
- 用户操作建议
- 开发者注意事项
创建了 test_concurrent_limit.py 自动化测试脚本:
- 同时发送6个并发请求
- 统计成功和被拒绝的请求数量
- 验证并发限制功能是否正常工作
- 限制最多5个并发图片生成任务
- 超出的请求返回 HTTP 429 错误
- 实时显示当前系统负载
- 清晰的状态提示
- 友好的错误信息
- 实用的重试建议
- 线程安全的计数器
- 自动清理机制
- 符合 RESTful 标准
当同时提交6个生成请求时:
- 前5个请求:被接受并开始生成
- 第6个请求:被拒绝,返回 429 错误
python test_concurrent_limit.py- 并发限制:5个任务(硬编码)
- 更新频率:每5秒刷新状态显示
在 app.py 的 generate_image() 函数中修改:
if current_count >= 5: # 修改这个数字| 文件 | 行号 | 说明 |
|---|---|---|
| app.py | 373-396 | 并发限制检查逻辑 |
| app.py | 41-42 | 全局变量和锁定义 |
| app.py | 560-568 | 获取生成状态API |
| static/index.html | 1137-1147 | 初始状态获取 |
| static/index.html | 1150-1157 | 状态面板显示 |
| static/index.html | 1203-1235 | 定期更新函数 |
| static/index.html | 1308-1316 | 错误处理逻辑 |
- 确保所有文件已保存
- 重启 Flask 服务器:
python src/app.py
- 测试功能:
- 方法1:手动快速点击生成按钮6次
- 方法2:运行自动化测试脚本
- ✅ 防止系统过载
- ✅ 提高稳定性
- ✅ 改善资源分配
- ✅ 提供清晰反馈
⚠️ 高并发场景下部分请求会被拒绝⚠️ 用户可能需要等待更长时间
- ✅ 向后兼容
- ✅ 不影响现有功能
- ✅ 只添加新的错误情况
-
配置化
- 从 config.json 读取限制值
- 支持动态调整
-
队列机制
- 超出的请求进入等待队列
- 按顺序自动处理
-
用户级限制
- 为不同用户设置不同限制
- 基于用户ID独立计数
-
智能提示
- 显示预计等待时间
- 提供队列位置信息
本次更新成功实现了并发任务限制功能,主要成果包括:
- 后端:添加了线程安全的并发检查和限制机制
- 前端:优化了状态显示和错误提示
- 文档:创建了完整的文档体系
- 测试:提供了自动化测试工具
功能已经就绪,可以投入使用。系统现在能够更好地管理并发负载,提高稳定性和用户体验。