From 60db66c180c153a0225917f13fd4a486d9ee7c67 Mon Sep 17 00:00:00 2001 From: zqc <835569504@qq.com> Date: Thu, 26 Feb 2026 16:36:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=AF=E5=8A=A8=E5=A2=9E=E5=8A=A0debug?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=EF=BC=8C=E4=B8=8D=E5=90=8E=E5=8F=B0=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E5=AD=90=E8=BF=9B=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.yaml | 3 +++ main_start.py | 30 +++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/config.yaml b/config.yaml index d5d5f55..c1a9143 100644 --- a/config.yaml +++ b/config.yaml @@ -31,6 +31,9 @@ database: echo: false # 服务组配置:每个组有独立的 WebSocket 和算法类型 +# debug_mode: True=前台运行(适合PyCharm调试),False=后台运行(适合生产部署) +debug_mode: true + service_groups: - name: "kadian_group" # 服务组名称 ws_host: "0.0.0.0" # WebSocket 服务地址 diff --git a/main_start.py b/main_start.py index 2a192e1..50dd7e4 100644 --- a/main_start.py +++ b/main_start.py @@ -22,6 +22,20 @@ logger = get_logger(__name__) PID_DIR = "pids" +def load_debug_mode(config_path: str = "config.yaml") -> bool: + """从配置文件读取调试模式""" + try: + with open(config_path, "r", encoding="utf-8") as f: + cfg = yaml.safe_load(f) + return cfg.get("debug_mode", False) + except Exception: + return False + + +# 调试模式:从配置文件读取 +DEBUG_MODE = load_debug_mode() + + def load_service_groups_from_yaml(config_path: str = "config.yaml") -> List[dict]: """从 YAML 文件加载服务组配置""" with open(config_path, "r", encoding="utf-8") as f: @@ -101,7 +115,12 @@ def start_rtsp_service(group: dict, script_path: str = "rtsp_service_ws_kadian.p logger.info(f"[INFO] Starting service group '{group_name}': ws={ws_host}:{ws_port}, algorithm={algorithm}") - process = subprocess.Popen(cmd, start_new_session=True) + # DEBUG_MODE=True 时前台运行,方便调试;False 时后台运行,适合部署 + if DEBUG_MODE: + process = subprocess.Popen(cmd) + else: + process = subprocess.Popen(cmd, start_new_session=True) + return process, group_name @@ -119,6 +138,7 @@ def start_service(): # 2. 启动每个服务组 started_count = 0 + processes = [] # 记录所有子进程,用于调试模式下等待 for group in service_groups: group_name = group.get("name", "default") @@ -133,11 +153,19 @@ def start_service(): time.sleep(0.5) save_pid(process.pid, name) logger.info(f"[INFO] Service group '{name}' started with PID {process.pid}") + processes.append((process, name)) started_count += 1 except Exception as e: logger.error(f"[ERROR] Failed to start service group '{group_name}': {e}") logger.info(f"[INFO] Started {started_count}/{len(service_groups)} service groups") + + # DEBUG_MODE=True 时,主进程等待所有子进程 + if DEBUG_MODE and processes: + logger.info("[DEBUG] Running in foreground mode, waiting for child processes...") + for process, name in processes: + process.wait() + return started_count > 0