Как победить многократное срабатывание кода в Django AppConfig.ready()?
Пытаюсь организовать одновременный старт с Django некоторого кода с помощью AppConfig.
( Функционал подписки на очереди rabbitmq )
import os
from django.apps import AppConfig
class CoreConfig(AppConfig):
name = 'core'
def ready(self):
""" Not implemented logic here"""
print(f'hi, {os.getpid()}')
Код запускается, но происходит это множество раз. Часть вызовов исполняют воркеры celery.
Лог из докера:
main-celery-worker | hi, 7
celery-beater | Waiting for postgresql...
celery-beater | postgresql started
celery-beater | celery beat v4.4.7 (cliffs) is starting.
celery-beater | hi, 7
celery-beater | hi, 7
backend_1 | hi, 7
main-celery-worker | hi, 7
celery-beater | hi, 7
backend_1 | hi, 7
main-celery-worker | hi, 7
celery-beater | hi, 7
backend_1 | hi, 7
main-celery-worker | hi, 7
Конфигурация docker-compose.yml:
version: '3.7'
services:
redis:
image: 'redis:alpine'
networks:
- shared_network
db:
image: postgres:12.0-alpine
ports:
- "5432:5432"
volumes:
- ./postgres-data-dev:/var/lib/postgresql/data:z
networks:
- shared_network
backend:
build:
context: ./backend
dockerfile: Dockerfile
command: sh -c "cd /code/src &&
python manage.py makemigrations &&
python manage.py collectstatic --no-input &&
python manage.py migrate &&
python manage.py test --no-input &&
gunicorn config.wsgi --bind 0.0.0.0:8000 --worker-class=gevent --timeout 620 --graceful-timeout=10 --workers=2 --threads=3"
restart: on-failure
volumes:
- ./backend:/code
ports:
- 8000:8000
env_file:
- ./.env.dev
networks:
- shared_network
depends_on:
- db
celery-beat:
build: backend/
container_name: celery-beater
hostname: celery-beat
command: sh -c "cd /code/src && celery -A config beat --pidfile="
restart: on-failure
volumes:
- ./backend:/code
env_file:
- ./.env
depends_on:
- db
- redis
networks:
- shared_network
main-celery-worker:
build: backend/
container_name: main-celery-worker
hostname: main-worker
command: sh -c "cd /code/src && celery -A config worker --loglevel=debug --concurrency=4"
restart: on-failure
volumes:
- ./backend:/code
env_file:
- ./.env
depends_on:
- db
- redis
networks:
- shared_network
networks:
shared_network:
driver: bridge