Proyecto LCX Dispatcharr multicuenta
Base Image Build / prepare (push) Has been cancelled
Build and Push Multi-Arch Docker Image / build-and-push (push) Has been cancelled
Frontend Tests / test (push) Has been cancelled
Base Image Build / docker (amd64, ubuntu-24.04) (push) Has been cancelled
Base Image Build / docker (arm64, ubuntu-24.04-arm) (push) Has been cancelled
Base Image Build / create-manifest (push) Has been cancelled

This commit is contained in:
root
2026-05-09 21:24:50 +02:00
commit f56b088643
721 changed files with 177870 additions and 0 deletions
+52
View File
@@ -0,0 +1,52 @@
"""Utilities for managing app initialization across multiple processes."""
import sys
import os
import psutil
import logging
logger = logging.getLogger(__name__)
def _is_worker_process():
"""Check if this process is a worker spawned by uwsgi/gunicorn."""
try:
parent = psutil.Process(os.getppid())
parent_name = parent.name()
return parent_name in ['uwsgi', 'gunicorn']
except Exception:
# If we can't determine, assume it's not a worker (safe default)
return False
def should_skip_initialization():
"""
Determine if app initialization should be skipped in this process.
Returns True if:
- A management command is being run (migrate, celery, shell, etc.)
- The development server (daphne) is running
- This is a worker process (not the master)
This prevents redundant initialization across multiple worker processes.
"""
# Skip management commands and background services
skip_commands = [
'celery', 'beat', 'migrate', 'makemigrations', 'shell', 'dbshell',
'collectstatic', 'loaddata'
]
if any(cmd in sys.argv for cmd in skip_commands):
logger.debug(f"Skipping initialization due to command: {sys.argv}")
return True
# Skip daphne development server (single process, no need to guard)
if 'daphne' in sys.argv[0] if sys.argv else False:
logger.debug(f"Skipping initialization in daphne development server. Command: {sys.argv}")
return True
# Skip if this is a worker process spawned by uwsgi/gunicorn
if _is_worker_process():
logger.debug(f"Skipping initialization in worker process. Command: {sys.argv}")
return True
return False