1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
import os
from django.core.exceptions import ImproperlyConfigured
from django.core.management.base import BaseCommand
from ... import get_scheduler
try:
from rq_scheduler.utils import setup_loghandlers
except ImportError:
def setup_loghandlers(*args, **kwargs):
raise ImproperlyConfigured('rq_scheduler not installed')
class Command(BaseCommand):
"""
Runs RQ scheduler
"""
help = __doc__
args = '<queue>'
def add_arguments(self, parser):
parser.add_argument('--pid', action='store', dest='pid',
default=None, help='PID file to write the scheduler`s pid into')
parser.add_argument('--interval', '-i', type=int, dest='interval',
default=60, help="""How often the scheduler checks for new jobs to add to the
queue (in seconds).""")
parser.add_argument('--queue', dest='queue', default='default',
help="Name of the queue used for scheduling.",)
parser.add_argument('args', nargs='*')
def handle(self, *args, **options):
pid = options.get('pid')
if pid:
with open(os.path.expanduser(pid), "w") as fp:
fp.write(str(os.getpid()))
# Verbosity is defined by default in BaseCommand for all commands
verbosity: int = options['verbosity']
if verbosity >= 2:
level = 'DEBUG'
elif verbosity == 0:
level = 'WARNING'
else:
level = 'INFO'
setup_loghandlers(level)
scheduler = get_scheduler(
name=options['queue'], interval=options['interval'])
scheduler.run()
|