| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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()
|