异步执行特征值计算
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user