优化爆管定位算法,增加多进程支持

This commit is contained in:
2026-03-07 15:31:04 +08:00
parent 0f8d33291d
commit 05ca940c9f
3 changed files with 93 additions and 10 deletions
@@ -1,5 +1,6 @@
import argparse
import json
from multiprocessing import cpu_count
from pathlib import Path
from typing import Any, Iterable
@@ -17,6 +18,8 @@ from .network_model import (
read_inf_inp_other,
)
DEFAULT_N_WORKERS = max(1, min(cpu_count() - 1, 4))
def _read_id_list_json(path):
if path is None:
@@ -111,6 +114,7 @@ def run_burst_location(
normal_flow: pd.Series | None = None,
min_dpressure: float = 2.0,
basic_pressure: float = 10.0,
n_workers: int = DEFAULT_N_WORKERS,
) -> dict[str, Any]:
if pressure_scada_ids is None or len(pressure_scada_ids) == 0:
raise ValueError("pressure_scada_ids cannot be empty.")
@@ -171,6 +175,7 @@ def run_burst_location(
similarity_mode = "CAD_new_gy"
max_flow = pd.Series(dtype=float)
stage_timing: dict[str, Any] = {}
located_pipe, elapsed_seconds, simulation_times, _, similarity_series = (
DN_search_multi_simple_add_flow_count_new(
wn=wn,
@@ -203,6 +208,8 @@ def run_burst_location(
if_gy=0,
pressure_threshold=float(min_dpressure),
leak_mag=float(burst_leakage),
n_workers=max(1, int(n_workers)),
stage_timing=stage_timing,
)
)
@@ -213,6 +220,7 @@ def run_burst_location(
"simulation_times": int(simulation_times),
"top_candidates": _build_top_candidates(similarity_series),
"similarity_mode": similarity_mode,
"stage_timing_seconds": stage_timing,
}
@@ -252,6 +260,12 @@ def _parse_args():
default=10.0,
help="(可选)基础服务压力,默认 10.0",
)
parser.add_argument(
"--n-workers",
type=int,
default=DEFAULT_N_WORKERS,
help="(可选)特征中心模拟进程数,默认 max(1, min(cpu_count()-1, 4))",
)
return parser.parse_args()
@@ -268,6 +282,7 @@ def main():
normal_flow=_read_series_csv(args.normal_flow_csv),
min_dpressure=args.min_dpressure,
basic_pressure=args.basic_pressure,
n_workers=args.n_workers,
)
print(json.dumps(result, ensure_ascii=False))