order and api and more
This commit is contained in:
@@ -2,7 +2,7 @@ from typing import Callable, Dict, Any
|
||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||
from apscheduler.triggers.interval import IntervalTrigger
|
||||
import logging
|
||||
from app.services.service_registry import ServiceRegistry
|
||||
from apscheduler.schedulers.base import SchedulerNotRunningError
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -10,7 +10,7 @@ class BaseScheduler:
|
||||
def __init__(self):
|
||||
self.scheduler = AsyncIOScheduler()
|
||||
self.jobs: Dict[str, Any] = {}
|
||||
ServiceRegistry.register(self.__class__.__name__, self)
|
||||
self._is_running = False
|
||||
|
||||
async def schedule_task(
|
||||
self,
|
||||
@@ -46,16 +46,20 @@ class BaseScheduler:
|
||||
|
||||
def start(self) -> None:
|
||||
"""Start the scheduler"""
|
||||
self.scheduler.start()
|
||||
logger.info("Scheduler started")
|
||||
if not self._is_running:
|
||||
self.scheduler.start()
|
||||
self._is_running = True
|
||||
logger.info("Scheduler started")
|
||||
|
||||
async def shutdown(self) -> None:
|
||||
"""Shutdown the scheduler"""
|
||||
try:
|
||||
self.scheduler.shutdown()
|
||||
logger.info("Scheduler stopped")
|
||||
except AttributeError as e:
|
||||
if "'NoneType' object has no attribute 'call_soon_threadsafe'" in str(e):
|
||||
logger.warning("Event loop already closed, skipping scheduler shutdown")
|
||||
else:
|
||||
if self._is_running:
|
||||
try:
|
||||
self.scheduler.shutdown()
|
||||
self._is_running = False
|
||||
logger.info("Scheduler stopped")
|
||||
except SchedulerNotRunningError:
|
||||
logger.warning("Scheduler was already stopped")
|
||||
except Exception as e:
|
||||
logger.error(f"Error shutting down scheduler: {str(e)}")
|
||||
raise
|
Reference in New Issue
Block a user