import time from logger_config import logger from config import get_search_keywords_from_db, has_running_task import main as main_module # 调度间隔:每 300 秒(5 分钟)检查一次 POLL_SECONDS = 1800 # 平台筛选:只处理 platform=9 的任务 PLATFORM = 9 def tick(platform: int = PLATFORM) -> None: """执行一轮调度检查。""" try: # 1) 先看是否已有执行中任务(status=2),有则跳过,避免打断 if has_running_task(platform=platform): logger.info(f"[调度器] 检测到执行中任务(status=2, platform={platform}),本轮跳过。") return # 2) 查询待执行任务(status=1) tasks = get_search_keywords_from_db(platform=platform) logger.info(f"[调度器] 当前待执行任务数: {len(tasks)}") if not tasks: logger.info(f"[调度器] 未发现待执行任务(status=1, platform={platform})。") return # 3) 有任务则触发 main.py 单次执行流程 logger.info( f"[调度器] 发现 {len(tasks)} 个待执行任务(platform={platform}),开始执行 main.main()。" ) main_module.main() except Exception as e: logger.error(f"[调度器] 本轮调度执行失败: {str(e)}") def run_scheduler(interval_seconds: int = POLL_SECONDS, platform: int = PLATFORM) -> None: """持续运行调度器:启动后立即执行一次,随后按固定间隔轮询。""" logger.info( f"[调度器] 已启动,轮询间隔={interval_seconds}秒,platform={platform}。" f"启动后立即执行首轮检查。" ) while True: # 记录本轮开始时间,用于计算剩余休眠时长 started = time.time() try: tick(platform=platform) except Exception as e: logger.error(f"[调度器] 调度循环出现未预期异常: {str(e)}") # 休眠“间隔 - 本轮耗时”,保证轮询节奏稳定 elapsed = time.time() - started sleep_seconds = max(0, interval_seconds - elapsed) logger.info(f"[调度器] 下一轮将在 {sleep_seconds:.1f} 秒后执行。") time.sleep(sleep_seconds) if __name__ == "__main__": run_scheduler()