优化任务调度说明
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
import signal
|
||||
import time
|
||||
from datetime import datetime
|
||||
from system_management.scheduler.task_scheduler import TaskScheduler
|
||||
from utils.logger import CrossPlatformLog
|
||||
from config import Config
|
||||
|
||||
|
||||
# 初始化日志
|
||||
log = CrossPlatformLog.get_logger("Main")
|
||||
|
||||
|
||||
class IntelligenceSystem:
|
||||
def __init__(self, db_config=None):
|
||||
"""初始化系统(仅作为容器,不包含业务逻辑)"""
|
||||
self.scheduler = TaskScheduler(Config.MYSQL_CONFIG, max_workers=5)
|
||||
self._running = False
|
||||
log.info("情报系统已初始化(Cron模式)")
|
||||
|
||||
def start(self):
|
||||
"""启动系统主入口"""
|
||||
self._running = True
|
||||
self._setup_signal_handlers()
|
||||
log.info("系统启动 - 运行在Cron调度模式")
|
||||
|
||||
try:
|
||||
# 主循环 - 仅负责定期检查任务
|
||||
while self._running:
|
||||
# 检查并执行到期任务
|
||||
self.scheduler.check_and_run_tasks()
|
||||
|
||||
# 短间隔轮询(每10秒检查一次,保证Cron时间精度)
|
||||
time.sleep(10)
|
||||
|
||||
except Exception as e:
|
||||
log.critical("系统主循环崩溃", exc_info=True)
|
||||
finally:
|
||||
self.shutdown()
|
||||
|
||||
def _setup_signal_handlers(self):
|
||||
"""设置系统信号处理器"""
|
||||
signal.signal(signal.SIGINT, self._handle_shutdown)
|
||||
signal.signal(signal.SIGTERM, self._handle_shutdown)
|
||||
log.debug("信号处理器已注册")
|
||||
|
||||
def _handle_shutdown(self, signum, frame):
|
||||
"""处理系统关闭信号"""
|
||||
log.info(f"收到关闭信号 {signum},开始关闭系统")
|
||||
self._running = False
|
||||
|
||||
def shutdown(self):
|
||||
"""优雅关闭系统"""
|
||||
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.start()
|
||||
except Exception as e:
|
||||
log.critical("情报系统启动失败", exc_info=True)
|
||||
raise
|
||||
Reference in New Issue
Block a user