异步执行特征值计算

This commit is contained in:
zqc
2025-12-20 22:06:13 +08:00
parent 3a4bcab991
commit a2623fd32e

View File

@@ -127,12 +127,9 @@ def process_feature_calculation(feature_id: int) -> bool:
return False
def process_pending_features() -> Dict[str, Any]:
async def process_pending_features():
"""
处理所有待处理的人脸特征计算
返回:
处理结果统计
异步处理所有待处理的人脸特征计算
"""
try:
with db_manager.get_session() as session:
@@ -164,46 +161,28 @@ def process_pending_features() -> Dict[str, Any]:
logger.info(f"发现待处理特征: {total_pending}个, 超时特征: {total_timeout}")
# 处理超时记录
timeout_success = 0
for feature in timeout_features:
feature.status = FeatureStatus.FAILED
feature.finish_time = datetime.now()
timeout_success += 1
if timeout_features:
session.commit()
# 处理待处理记录
processed_count = 0
success_count = 0
for feature in pending_features:
processed_count += 1
if process_feature_calculation(feature.id):
success_count += 1
process_feature_calculation(feature.id)
# 每处理10个记录输出一次进度
if processed_count % 10 == 0:
logger.info(f"处理进度: {processed_count}/{total_pending}")
return {
"total_pending": total_pending,
"total_timeout": total_timeout,
"processed_count": processed_count,
"success_count": success_count,
"timeout_handled": timeout_success
}
logger.info(f"特征计算处理完成: 共处理 {processed_count} 个特征")
except Exception as e:
logger.error(f"批量处理特征计算时发生异常: {str(e)}")
return {
"total_pending": 0,
"total_timeout": 0,
"processed_count": 0,
"success_count": 0,
"timeout_handled": 0,
"error": str(e)
}
@router.post("/start-feature-calculation", summary="开始人脸特征计算")
@@ -220,13 +199,12 @@ async def start_feature_calculation(background_tasks: BackgroundTasks):
返回处理结果统计
"""
try:
# 在后台任务中处理,避免阻塞请求
result = process_pending_features()
# 在后台任务中异步处理,避免阻塞请求
background_tasks.add_task(process_pending_features)
return {
"success": True,
"message": "特征计算处理完成",
"data": result
"message": "收到特征计算请求"
}
except Exception as e: