manager.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 (
  6. demand_pool_daily_strategy_alert_job,
  7. demand_pool_today_incremental_sync_job,
  8. heartbeat_job,
  9. )
  10. scheduler = AsyncIOScheduler(timezone="Asia/Shanghai")
  11. def setup_jobs() -> None:
  12. scheduler.add_job(
  13. heartbeat_job,
  14. trigger=IntervalTrigger(seconds=settings.scheduler_heartbeat_seconds),
  15. id="heartbeat_job",
  16. replace_existing=True,
  17. )
  18. if settings.demand_pool_hourly_sync_enabled:
  19. scheduler.add_job(
  20. demand_pool_today_incremental_sync_job,
  21. trigger=CronTrigger(minute=settings.demand_pool_hourly_sync_minute),
  22. id="demand_pool_hourly_sync_job",
  23. replace_existing=True,
  24. max_instances=1,
  25. coalesce=True,
  26. )
  27. if settings.demand_pool_daily_strategy_alert_enabled:
  28. scheduler.add_job(
  29. demand_pool_daily_strategy_alert_job,
  30. trigger=CronTrigger(
  31. hour=settings.demand_pool_daily_strategy_alert_hour,
  32. minute=settings.demand_pool_daily_strategy_alert_minute,
  33. ),
  34. id="demand_pool_daily_strategy_alert_job",
  35. replace_existing=True,
  36. max_instances=1,
  37. coalesce=True,
  38. )
  39. def start_scheduler() -> None:
  40. if scheduler.running:
  41. return
  42. setup_jobs()
  43. scheduler.start()
  44. def shutdown_scheduler() -> None:
  45. if not scheduler.running:
  46. return
  47. scheduler.shutdown(wait=False)