from datetime import datetime from apscheduler.schedulers.background import BackgroundScheduler from sqlalchemy.orm import Session from app.agent.runner import AgentRunner from app.core.config import Settings from app.db.session import SessionLocal def run_scheduled_job(settings: Settings) -> None: # 定时任务不在请求生命周期内,需要自己创建和关闭数据库会话。 db: Session = SessionLocal() try: AgentRunner(db=db, settings=settings).run_daily() finally: db.close() def build_scheduler(settings: Settings) -> BackgroundScheduler: # APScheduler负责自动循环运行,启动后先跑一次,再按固定间隔持续采集。 scheduler = BackgroundScheduler(timezone=settings.agent_timezone) scheduler.add_job( run_scheduled_job, trigger="interval", minutes=settings.agent_interval_minutes, args=[settings], id="continuous-intelligence", next_run_time=datetime.now(scheduler.timezone), replace_existing=True, max_instances=1, coalesce=True, ) return scheduler