Files
intelligence_system/main.py
T
2025-08-07 17:58:41 +08:00

112 lines
3.1 KiB
Python

# main.py
import signal
import time
from datetime import datetime
from system_management.scheduler.task_scheduler import TaskScheduler
from utils.logger import CrossPlatformLog
# 初始化日志
log = CrossPlatformLog.get_logger("Main")
class IntelligenceSystem:
def __init__(self, db_config=None):
self.scheduler = TaskScheduler(db_config)
self._running = False
log.info("IntelligenceSystem initialized")
def run(self):
"""启动系统主循环"""
self._running = True
self._register_signal_handlers()
log.info("Starting main loop")
try:
while self._running:
start_time = time.time()
self._run_cycle()
# 精确控制循环间隔(扣除执行时间)
elapsed = time.time() - start_time
sleep_time = max(0, 60 - elapsed)
time.sleep(sleep_time)
except KeyboardInterrupt:
log.info("Received keyboard interrupt")
except Exception as e:
log.critical(
"System crashed",
exc_info=True
)
raise
finally:
self.shutdown()
def _run_cycle(self):
"""单个运行周期"""
try:
# 1. 执行任务调度
result = self.scheduler.run_pending_tasks()
# 2. 每小时记录系统状态
if datetime.now().minute == 0:
self._log_system_status()
except Exception as e:
log.error(
"Cycle execution failed",
exc_info=True
)
raise
def _log_system_status(self):
"""记录系统状态"""
try:
status_df = self.scheduler.get_task_status()
pending = len(status_df[status_df['next_run_time'] <= datetime.now()])
log.info(
"System status",
pending_tasks=pending,
active_tasks=len(status_df),
last_success=status_df['last_run_time'].max()
)
except Exception as e:
log.error(
"Failed to log system status",
exc_info=True
)
def _register_signal_handlers(self):
"""注册信号处理"""
signal.signal(signal.SIGINT, self._handle_shutdown)
signal.signal(signal.SIGTERM, self._handle_shutdown)
log.debug("Signal handlers registered")
def _handle_shutdown(self, signum, frame):
"""处理关闭信号"""
log.info(
f"Processing shutdown signal {signum}",
signal=signum
)
self._running = False
def shutdown(self):
"""关闭系统"""
log.info("Performing system shutdown")
# 此处可添加其他清理逻辑
log.success("System shutdown completed")
if __name__ == "__main__":
try:
system = IntelligenceSystem()
system.run()
except Exception as e:
log.critical(
"System startup failed",
exc_info=True
)
raise