优化漏损识别器,支持多进程评估

This commit is contained in:
2026-03-05 18:18:28 +08:00
parent b8aee14c00
commit 63d3458fb4
8 changed files with 425 additions and 182 deletions
+7 -6
View File
@@ -1,11 +1,11 @@
import os
from typing import Any
from datetime import datetime
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel
from app.auth.dependencies import get_current_user
from app.domain.schemas.user import UserInDB
from app.auth.keycloak_dependencies import get_current_keycloak_username
from app.services.leakage_identifier import (
get_leakage_identify_scheme_detail,
list_leakage_identify_schemes,
@@ -13,6 +13,7 @@ from app.services.leakage_identifier import (
)
router = APIRouter()
DEFAULT_N_WORKERS = max(1, min((os.cpu_count() or 1) - 1, 4))
class LeakageIdentifyRequest(BaseModel):
@@ -28,6 +29,7 @@ class LeakageIdentifyRequest(BaseModel):
output_dir: str = "db_inp"
pop_size: int = 50
max_gen: int = 100
n_workers: int = DEFAULT_N_WORKERS
output_flow_unit: str = "m3/s"
dma_count: int | None = None
scada_start: datetime | None = None
@@ -38,12 +40,11 @@ class LeakageIdentifyRequest(BaseModel):
@router.post("/identify/")
async def identify_leakage(
data: LeakageIdentifyRequest, current_user: UserInDB = Depends(get_current_user)
data: LeakageIdentifyRequest,
username: str = Depends(get_current_keycloak_username),
) -> dict[str, Any]:
try:
return run_leakage_identification(
**data.model_dump(), username=current_user.username
)
return run_leakage_identification(**data.model_dump(), username=username)
except Exception as exc:
raise HTTPException(status_code=400, detail=str(exc))