import logging import time from django.core.management.base import BaseCommand from ...services.timelapse_worker import run_one_job, run_specific_job logger = logging.getLogger('camlaps') class Command(BaseCommand): help = 'Запуск обработчика очереди таймлапсов.' def add_arguments(self, parser): parser.add_argument('--once', action='store_true', help='Обработать только одну задачу и выйти.') parser.add_argument('--job-id', type=int, default=None, help='ID задачи для немедленного запуска.') parser.add_argument( '--sleep', type=int, default=5, help='Пауза между итерациями в loop-режиме (секунды).', ) def handle(self, *args, **options): logger.info('worker_cmd:handle:start') once = options['once'] sleep_seconds = options['sleep'] job_id = options['job_id'] if job_id is not None: try: run_specific_job(job_id) logger.info('worker_cmd:handle:done mode=job_id job_id=%s', job_id) except Exception: logger.exception('worker_cmd:handle:error mode=job_id job_id=%s', job_id) raise return if once: try: run_one_job() logger.info('worker_cmd:handle:done mode=once') except Exception: logger.exception('worker_cmd:handle:error mode=once') raise return while True: try: processed = run_one_job() if not processed: time.sleep(sleep_seconds) except Exception: logger.exception('worker_cmd:handle:error mode=loop') raise