Files
timelaps/camlaps/management/commands/run_timelapse_worker.py
2026-04-19 20:05:21 +03:00

55 lines
1.9 KiB
Python

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