36 lines
1.2 KiB
Python
36 lines
1.2 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:
|
|
# 调度器始终可供手动任务复用,自动采集关闭时不注册任何周期任务。
|
|
scheduler = BackgroundScheduler(timezone=settings.agent_timezone)
|
|
if not settings.agent_enabled:
|
|
return scheduler
|
|
|
|
# APScheduler负责按固定间隔自动运行,避免服务重启时连续触发外部采集限流。
|
|
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
|