为了防止系统过载,DrawThings WebUI 现在限制了同时进行的图片生成任务数量。当有5个或更多任务正在生成时,新的生成请求将被拒绝。
-
并发计数器 (
app.py)- 使用全局变量
generating_count跟踪当前正在生成的任务数量 - 使用线程锁
count_lock确保线程安全 - 在
/api/generate路由开始时检查并发数量
- 使用全局变量
-
限制逻辑
# 检查当前正在生成的任务数量 with count_lock: current_count = generating_count if current_count >= 5: return jsonify({ "success": False, "error": f"当前已有 {current_count} 个任务正在生成中,请稍后再试(最多允许5个并发任务)" }), 429 # 增加并发计数 generating_count += 1
-
HTTP 状态码
- 使用 429 (Too Many Requests) 状态码表示请求被拒绝
- 符合 RESTful API 规范
-
实时显示并发数量
- 在状态面板中显示当前正在生成的任务数量
- 每5秒自动更新一次
- 显示格式:
🔄 当前有 X 个任务正在生成中... (最多允许5个并发任务)
-
错误处理
- 检测 429 状态码
- 显示友好的错误提示
- 提示用户可以稍后重试
获取当前正在生成的任务数量。
响应示例:
{
"success": true,
"generating_count": 3
}生成图片接口已添加并发限制。
成功响应:
{
"success": true,
"image_url": "/generated_images/generated_20260410_120000.png",
"elapsed_time": 30.5,
"seed": 1234567890
}并发限制响应(429):
{
"success": false,
"error": "当前已有 5 个任务正在生成中,请稍后再试(最多允许5个并发任务)"
}当有任务正在生成时,用户会在状态面板看到:
- 黄色背景的信息框
- 显示当前正在生成的任务数量
- 明确标注最大并发限制
当用户尝试在第6个任务时提交生成请求:
- 弹出警告对话框
- 显示具体的错误信息
- 提供建议:稍等片刻后再次尝试
提供了测试脚本 test_concurrent_limit.py 来验证功能:
python test_concurrent_limit.py该脚本会:
- 同时发送6个生成请求
- 统计成功和被拒绝的请求数量
- 验证并发限制是否正常工作
当前的并发限制是硬编码为5个任务。如果需要修改这个限制,可以在 app.py 的 generate_image() 函数中修改判断条件:
if current_count >= 5: # 修改这个数字来调整限制- 线程安全:使用线程锁确保并发计数的准确性
- 自动清理:无论请求成功还是失败,都会在
finally块中减少计数器 - 用户友好:提供清晰的错误提示和实时状态显示
- 符合标准:使用标准的 HTTP 429 状态码
可能的改进方向:
- 将并发限制值配置化(从配置文件读取)
- 为不同用户设置不同的并发限制
- 添加队列机制,让超出的请求排队等待
- 提供更详细的队列位置信息