Skip to content

Latest commit

 

History

History
132 lines (98 loc) · 3.35 KB

File metadata and controls

132 lines (98 loc) · 3.35 KB

并发任务限制功能

功能概述

为了防止系统过载,DrawThings WebUI 现在限制了同时进行的图片生成任务数量。当有5个或更多任务正在生成时,新的生成请求将被拒绝。

技术实现

后端实现

  1. 并发计数器 (app.py)

    • 使用全局变量 generating_count 跟踪当前正在生成的任务数量
    • 使用线程锁 count_lock 确保线程安全
    • /api/generate 路由开始时检查并发数量
  2. 限制逻辑

    # 检查当前正在生成的任务数量
    with count_lock:
        current_count = generating_count
        if current_count >= 5:
            return jsonify({
                "success": False,
                "error": f"当前已有 {current_count} 个任务正在生成中,请稍后再试(最多允许5个并发任务)"
            }), 429
        # 增加并发计数
        generating_count += 1
  3. HTTP 状态码

    • 使用 429 (Too Many Requests) 状态码表示请求被拒绝
    • 符合 RESTful API 规范

前端实现

  1. 实时显示并发数量

    • 在状态面板中显示当前正在生成的任务数量
    • 每5秒自动更新一次
    • 显示格式:🔄 当前有 X 个任务正在生成中... (最多允许5个并发任务)
  2. 错误处理

    • 检测 429 状态码
    • 显示友好的错误提示
    • 提示用户可以稍后重试

API 接口

GET /api/status/generating

获取当前正在生成的任务数量。

响应示例:

{
  "success": true,
  "generating_count": 3
}

POST /api/generate

生成图片接口已添加并发限制。

成功响应:

{
  "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

该脚本会:

  1. 同时发送6个生成请求
  2. 统计成功和被拒绝的请求数量
  3. 验证并发限制是否正常工作

配置说明

当前的并发限制是硬编码为5个任务。如果需要修改这个限制,可以在 app.pygenerate_image() 函数中修改判断条件:

if current_count >= 5:  # 修改这个数字来调整限制

注意事项

  1. 线程安全:使用线程锁确保并发计数的准确性
  2. 自动清理:无论请求成功还是失败,都会在 finally 块中减少计数器
  3. 用户友好:提供清晰的错误提示和实时状态显示
  4. 符合标准:使用标准的 HTTP 429 状态码

未来改进

可能的改进方向:

  • 将并发限制值配置化(从配置文件读取)
  • 为不同用户设置不同的并发限制
  • 添加队列机制,让超出的请求排队等待
  • 提供更详细的队列位置信息