From bfb9f14f0ec9b96328708ce1ccb02495c8dd13a3 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 14 Aug 2012 00:24:26 -0400 Subject: [PATCH] Shutdown scheduler on management commands and on every exit --- apps/scheduler/__init__.py | 34 ++++++++++++++-------------------- apps/scheduler/literals.py | 1 + apps/scheduler/runtime.py | 11 ++++++++++- 3 files changed, 25 insertions(+), 21 deletions(-) create mode 100644 apps/scheduler/literals.py diff --git a/apps/scheduler/__init__.py b/apps/scheduler/__init__.py index 84ee326f65..85853f0acc 100644 --- a/apps/scheduler/__init__.py +++ b/apps/scheduler/__init__.py @@ -1,37 +1,31 @@ from __future__ import absolute_import +import atexit import logging +import sys -from .runtime import scheduler +from .runtime import scheduler, lockdown -from django.db.models.signals import post_syncdb -from django.dispatch import receiver - -from south.signals import pre_migrate - -from signaler.signals import pre_collectstatic from project_tools.api import register_tool from .links import job_list +from .literals import SHUTDOWN_COMMANDS logger = logging.getLogger(__name__) -@receiver(post_syncdb, dispatch_uid='scheduler_shutdown_post_syncdb') -def scheduler_shutdown_post_syncdb(sender, **kwargs): - logger.debug('Scheduler shut down on post syncdb signal') + +def schedule_shutdown_on_exit(): + logger.debug('Scheduler shut down on exit') scheduler.shutdown() -@receiver(pre_collectstatic, dispatch_uid='sheduler_shutdown_pre_collectstatic') -def sheduler_shutdown_pre_collectstatic(sender, **kwargs): - logger.debug('Scheduler shut down on collectstatic signal') +if any([command in sys.argv for command in SHUTDOWN_COMMANDS]): + logger.debug('Scheduler shut down on SHUTDOWN_COMMAND') + # Shutdown any scheduler already running scheduler.shutdown() + # Prevent any new scheduler afterwards to start + lockdown() + - -@receiver(pre_migrate, dispatch_uid='sheduler_shutdown_pre_migrate') -def sheduler_shutdown_pre_migrate(sender, **kwargs): - logger.debug('Scheduler shut down on pre_migrate signal') - scheduler.shutdown() - - +atexit.register(schedule_shutdown_on_exit) register_tool(job_list) diff --git a/apps/scheduler/literals.py b/apps/scheduler/literals.py new file mode 100644 index 0000000000..b56b5148d7 --- /dev/null +++ b/apps/scheduler/literals.py @@ -0,0 +1 @@ +SHUTDOWN_COMMANDS = ['syncdb', 'migrate', 'schemamigration', 'datamigration', 'collectstatic', 'shell', 'shell_plus'] diff --git a/apps/scheduler/runtime.py b/apps/scheduler/runtime.py index a9440e946b..63dbdfa3cd 100644 --- a/apps/scheduler/runtime.py +++ b/apps/scheduler/runtime.py @@ -1,4 +1,13 @@ from apscheduler.scheduler import Scheduler +_lockdown = False scheduler = Scheduler() -scheduler.start() + + +def lockdown(): + global _lockdown + _lockdown = True + + +if not _lockdown: + scheduler.start()