Shutdown scheduler on management commands and on every exit

This commit is contained in:
Roberto Rosario
2012-08-14 00:24:26 -04:00
parent 60c7491f37
commit bfb9f14f0e
3 changed files with 25 additions and 21 deletions

View File

@@ -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)

View File

@@ -0,0 +1 @@
SHUTDOWN_COMMANDS = ['syncdb', 'migrate', 'schemamigration', 'datamigration', 'collectstatic', 'shell', 'shell_plus']

View File

@@ -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()