启动增加debug模式,不后台启动子进程
This commit is contained in:
@@ -31,6 +31,9 @@ database:
|
|||||||
echo: false
|
echo: false
|
||||||
|
|
||||||
# 服务组配置:每个组有独立的 WebSocket 和算法类型
|
# 服务组配置:每个组有独立的 WebSocket 和算法类型
|
||||||
|
# debug_mode: True=前台运行(适合PyCharm调试),False=后台运行(适合生产部署)
|
||||||
|
debug_mode: true
|
||||||
|
|
||||||
service_groups:
|
service_groups:
|
||||||
- name: "kadian_group" # 服务组名称
|
- name: "kadian_group" # 服务组名称
|
||||||
ws_host: "0.0.0.0" # WebSocket 服务地址
|
ws_host: "0.0.0.0" # WebSocket 服务地址
|
||||||
|
|||||||
@@ -22,6 +22,20 @@ logger = get_logger(__name__)
|
|||||||
PID_DIR = "pids"
|
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]:
|
def load_service_groups_from_yaml(config_path: str = "config.yaml") -> List[dict]:
|
||||||
"""从 YAML 文件加载服务组配置"""
|
"""从 YAML 文件加载服务组配置"""
|
||||||
with open(config_path, "r", encoding="utf-8") as f:
|
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}")
|
logger.info(f"[INFO] Starting service group '{group_name}': ws={ws_host}:{ws_port}, algorithm={algorithm}")
|
||||||
|
|
||||||
|
# DEBUG_MODE=True 时前台运行,方便调试;False 时后台运行,适合部署
|
||||||
|
if DEBUG_MODE:
|
||||||
|
process = subprocess.Popen(cmd)
|
||||||
|
else:
|
||||||
process = subprocess.Popen(cmd, start_new_session=True)
|
process = subprocess.Popen(cmd, start_new_session=True)
|
||||||
|
|
||||||
return process, group_name
|
return process, group_name
|
||||||
|
|
||||||
|
|
||||||
@@ -119,6 +138,7 @@ def start_service():
|
|||||||
|
|
||||||
# 2. 启动每个服务组
|
# 2. 启动每个服务组
|
||||||
started_count = 0
|
started_count = 0
|
||||||
|
processes = [] # 记录所有子进程,用于调试模式下等待
|
||||||
for group in service_groups:
|
for group in service_groups:
|
||||||
group_name = group.get("name", "default")
|
group_name = group.get("name", "default")
|
||||||
|
|
||||||
@@ -133,11 +153,19 @@ def start_service():
|
|||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
save_pid(process.pid, name)
|
save_pid(process.pid, name)
|
||||||
logger.info(f"[INFO] Service group '{name}' started with PID {process.pid}")
|
logger.info(f"[INFO] Service group '{name}' started with PID {process.pid}")
|
||||||
|
processes.append((process, name))
|
||||||
started_count += 1
|
started_count += 1
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"[ERROR] Failed to start service group '{group_name}': {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")
|
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
|
return started_count > 0
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user