Files
signalscout-backend/app/agent/scheduler.py
T

32 lines
1.0 KiB
Python

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",
replace_existing=True,
max_instances=1,
coalesce=True,
)
return scheduler