修改WS兼容检测的Future对象

This commit is contained in:
2025-09-08 18:10:49 +08:00
parent 8ceb92c572
commit 1dd832e18d
2 changed files with 52 additions and 26 deletions

View File

@ -9,7 +9,7 @@ import numpy as np
# -------------------------- 核心配置参数 --------------------------
MAX_WORKERS = 6 # 线程池最大线程数
DETECTION_ORDER = ["yolo", "face", "ocr"] # 检测优先级顺序
TIMEOUT = 30 # 检测超时时间(秒)
TIMEOUT = 30 # 检测超时时间(秒) 【确保此常量可被外部导入】
# -------------------------- 全局状态管理 --------------------------
_executor = None # 线程池实例
@ -80,7 +80,7 @@ def shutdown():
# -------------------------- 检测逻辑实现 --------------------------
def _detect_in_thread(frame: np.ndarray, task_id: int) -> tuple:
"""在子线程中执行检测逻辑"""
"""在子线程中执行检测逻辑返回4元素tuple是否成功、结果、检测器类型、任务ID"""
thread_name = threading.current_thread().name
print(f"任务[{task_id}] 开始执行、线程: {thread_name}")
@ -99,27 +99,27 @@ def _detect_in_thread(frame: np.ndarray, task_id: int) -> tuple:
print(f"任务[{task_id}] {detector}检测结果: {'成功' if flag else '失败'}")
if flag:
print(f"任务[{task_id}] 完成检测、使用检测器: {detector}")
return (True, result, detector, task_id)
return (True, result, detector, task_id) # 4元素tuple
# 所有检测器均未检测到结果
print(f"任务[{task_id}] 所有检测器均未检测到内容")
return (False, "未检测到任何内容", "none", task_id)
return (False, "未检测到任何内容", "none", task_id) # 4元素tuple
except Exception as e:
print(f"任务[{task_id}] 检测过程发生错误: {str(e)}")
return (False, f"检测错误: {str(e)}", "error", task_id)
return (False, f"检测错误: {str(e)}", "error", task_id) # 4元素tuple
# -------------------------- 外部调用接口 --------------------------
def detect(frame: np.ndarray) -> Future:
"""
提交检测任务到线程池
提交检测任务到线程池返回Future对象需调用result()获取4元素结果
参数:
frame: 待检测图像(ndarray格式、cv2.imdecode生成)
返回:
Future对象、通过result()方法获取检测结果
Future对象、result()返回tuple: (has_violation, data, detector_type, task_id)
"""
# 确保模型已加载
if not _model_loaded:
@ -129,8 +129,7 @@ def detect(frame: np.ndarray) -> Future:
# 生成任务ID
task_id = _get_next_task_id()
# 提交任务到线程池
# 提交任务到线程池返回Future
future = _executor.submit(_detect_in_thread, frame, task_id)
print(f"任务[{task_id}]: 已提交到线程池")
return future
return future