diff --git a/apps/scheduler/__init__.py b/apps/scheduler/__init__.py index 25fcbf6190..a41ed11a91 100644 --- a/apps/scheduler/__init__.py +++ b/apps/scheduler/__init__.py @@ -17,12 +17,14 @@ logger = logging.getLogger(__name__) def schedule_shutdown_on_exit(): logger.debug('Schedulers shut down on exit') LocalScheduler.shutdown_all() + LocalScheduler.clear_all() if any([command in sys.argv for command in SHUTDOWN_COMMANDS]): logger.debug('Schedulers shut down on SHUTDOWN_COMMAND') # Shutdown any scheduler already running LocalScheduler.shutdown_all() + LocalScheduler.clear_all() # Prevent any new scheduler afterwards to start LocalScheduler.lockdown() diff --git a/apps/scheduler/api.py b/apps/scheduler/api.py index 983e23e434..699aa4f915 100644 --- a/apps/scheduler/api.py +++ b/apps/scheduler/api.py @@ -72,6 +72,11 @@ class LocalScheduler(object): def lockdown(cls): cls._lockdown = True + @classmethod + def clear_all(cls): + for scheduler in cls.scheduler_registry.values(): + scheduler.clear() + def __init__(self, name, label=None): self.scheduled_jobs = {} self._scheduler = None @@ -108,7 +113,9 @@ class LocalScheduler(object): self.stop_job(job) def stop_job(self, job): - self._scheduler.unschedule_job(job._job) + if self.running: + self._scheduler.unschedule_job(job._job) + del(self.scheduled_jobs[job.name]) job.scheduler = None