Shutdown scheduler on management commands and on every exit
This commit is contained in:
+14
-20
@@ -1,37 +1,31 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import atexit
|
||||||
import logging
|
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 project_tools.api import register_tool
|
||||||
|
|
||||||
from .links import job_list
|
from .links import job_list
|
||||||
|
from .literals import SHUTDOWN_COMMANDS
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@receiver(post_syncdb, dispatch_uid='scheduler_shutdown_post_syncdb')
|
|
||||||
def scheduler_shutdown_post_syncdb(sender, **kwargs):
|
def schedule_shutdown_on_exit():
|
||||||
logger.debug('Scheduler shut down on post syncdb signal')
|
logger.debug('Scheduler shut down on exit')
|
||||||
scheduler.shutdown()
|
scheduler.shutdown()
|
||||||
|
|
||||||
|
|
||||||
@receiver(pre_collectstatic, dispatch_uid='sheduler_shutdown_pre_collectstatic')
|
if any([command in sys.argv for command in SHUTDOWN_COMMANDS]):
|
||||||
def sheduler_shutdown_pre_collectstatic(sender, **kwargs):
|
logger.debug('Scheduler shut down on SHUTDOWN_COMMAND')
|
||||||
logger.debug('Scheduler shut down on collectstatic signal')
|
# Shutdown any scheduler already running
|
||||||
scheduler.shutdown()
|
scheduler.shutdown()
|
||||||
|
# Prevent any new scheduler afterwards to start
|
||||||
|
lockdown()
|
||||||
|
|
||||||
|
|
||||||
|
atexit.register(schedule_shutdown_on_exit)
|
||||||
@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()
|
|
||||||
|
|
||||||
|
|
||||||
register_tool(job_list)
|
register_tool(job_list)
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
SHUTDOWN_COMMANDS = ['syncdb', 'migrate', 'schemamigration', 'datamigration', 'collectstatic', 'shell', 'shell_plus']
|
||||||
@@ -1,4 +1,13 @@
|
|||||||
from apscheduler.scheduler import Scheduler
|
from apscheduler.scheduler import Scheduler
|
||||||
|
|
||||||
|
_lockdown = False
|
||||||
scheduler = Scheduler()
|
scheduler = Scheduler()
|
||||||
scheduler.start()
|
|
||||||
|
|
||||||
|
def lockdown():
|
||||||
|
global _lockdown
|
||||||
|
_lockdown = True
|
||||||
|
|
||||||
|
|
||||||
|
if not _lockdown:
|
||||||
|
scheduler.start()
|
||||||
|
|||||||
Reference in New Issue
Block a user