manager.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from apscheduler.schedulers.asyncio import AsyncIOScheduler
  2. from apscheduler.triggers.cron import CronTrigger
  3. from apscheduler.triggers.interval import IntervalTrigger
  4. from app.core.config import settings
  5. from app.scheduler.jobs import demand_pool_today_incremental_sync_job, heartbeat_job
  6. scheduler = AsyncIOScheduler(timezone="Asia/Shanghai")
  7. def setup_jobs() -> None:
  8. scheduler.add_job(
  9. heartbeat_job,
  10. trigger=IntervalTrigger(seconds=settings.scheduler_heartbeat_seconds),
  11. id="heartbeat_job",
  12. replace_existing=True,
  13. )
  14. if settings.demand_pool_hourly_sync_enabled:
  15. scheduler.add_job(
  16. demand_pool_today_incremental_sync_job,
  17. trigger=CronTrigger(minute=settings.demand_pool_hourly_sync_minute),
  18. id="demand_pool_hourly_sync_job",
  19. replace_existing=True,
  20. max_instances=1,
  21. coalesce=True,
  22. )
  23. def start_scheduler() -> None:
  24. if scheduler.running:
  25. return
  26. setup_jobs()
  27. scheduler.start()
  28. def shutdown_scheduler() -> None:
  29. if not scheduler.running:
  30. return
  31. scheduler.shutdown(wait=False)