调度系统开发

This commit is contained in:
z66
2025-09-09 16:29:20 +08:00
parent 65cbb712f3
commit cf78104a5b
8 changed files with 188 additions and 297 deletions
+34 -73
View File
@@ -1,4 +1,3 @@
# main.py
import signal
import time
from datetime import datetime
@@ -11,101 +10,63 @@ log = CrossPlatformLog.get_logger("Main")
class IntelligenceSystem:
def __init__(self, db_config=None):
self.scheduler = TaskScheduler(db_config)
"""初始化系统(仅作为容器,不包含业务逻辑)"""
self.scheduler = TaskScheduler(db_config, max_workers=5)
self._running = False
log.info("IntelligenceSystem initialized")
log.info("情报系统已初始化(Cron模式)")
def run(self):
"""启动系统主循环"""
def start(self):
"""启动系统主入口"""
self._running = True
self._register_signal_handlers()
log.info("Starting main loop")
self._setup_signal_handlers()
log.info("系统启动 - 运行在Cron调度模式")
try:
# 主循环 - 仅负责定期检查任务
while self._running:
start_time = time.time()
self._run_cycle()
# 检查并执行到期任务
self.scheduler.check_and_run_tasks()
# 精确控制循环间隔(扣除执行时间
elapsed = time.time() - start_time
sleep_time = max(0, 60 - elapsed)
time.sleep(sleep_time)
# 短间隔轮询(每10秒检查一次,保证Cron时间精度
time.sleep(10)
except KeyboardInterrupt:
log.info("Received keyboard interrupt")
except Exception as e:
log.critical(
"System crashed",
exc_info=True
)
raise
log.critical("系统主循环崩溃", exc_info=True)
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):
"""注册信号处理"""
def _setup_signal_handlers(self):
"""设置系统信号处理器"""
signal.signal(signal.SIGINT, self._handle_shutdown)
signal.signal(signal.SIGTERM, self._handle_shutdown)
log.debug("Signal handlers registered")
log.debug("信号处理器已注册")
def _handle_shutdown(self, signum, frame):
"""处理关闭信号"""
log.info(
f"Processing shutdown signal {signum}",
signal=signum
)
"""处理系统关闭信号"""
log.info(f"收到关闭信号 {signum},开始关闭系统")
self._running = False
def shutdown(self):
"""关闭系统"""
log.info("Performing system shutdown")
# 此处可添加其他清理逻辑
log.success("System shutdown completed")
"""优雅关闭系统"""
log.info("开始优雅关闭系统")
# 等待所有正在执行的任务完成
self.scheduler.executor.shutdown(wait=True, cancel_futures=False)
# 记录最终状态
pending_count = self.scheduler.get_pending_tasks_count()
log.info(
"系统关闭完成",
pending_tasks=pending_count,
shutdown_time=datetime.now()
)
if __name__ == "__main__":
try:
# 启动系统 - 仅作为入口,不包含调度逻辑
system = IntelligenceSystem()
system.run()
system.start()
except Exception as e:
log.critical(
"System startup failed",
exc_info=True
)
log.critical("情报系统启动失败", exc_info=True)
raise