Celery worker прекращает выполнение заданий через несколько минут после неудачной синхронизации

В моем проекте django возникла проблема с использованием celery и redis в качестве брокера сообщений.

Current versions: 
celery==5.3.6
redis==5.0.8

Проблему можно описать с помощью этого журнала:

Это происходит как в docker, так и в системе aws, когда я развертываю контейнер. Сразу после развертывания или составления контейнера, если я даю системе задания на выполнение, она прекрасно их выполняет, но если я оставляю ее неиспользованной на пару минут, она ломается, как написано в журнале.

В настоящее время я использую эту конфигурацию на docker-compose:

celery:
    <<: *app
    command: celery -A core worker --without-mingle --without-gossip --without-heartbeat --pool=solo -l info -Q celery,celery:1,celery:2,celery:3
    ports:
        - 5554:5554
    depends_on:
        - db
        - redis

и эта конфигурация на celery.py:

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# Set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')

# Initialize Celery application.
app = Celery('core')

# Load task-related settings from the Django project settings using the 'CELERY' namespace.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Ensure broker connection retries on startup for Celery 6.0 and above.
app.conf.broker_connection_retry_on_startup = True

# Broker transport options for message priority and task routing strategy.
app.conf.broker_transport_options = {
    'priority_steps': list(range(10)),
    'sep': ':',
    'queue_order_strategy': 'priority',
}

# Limit task prefetching to one task at a time to balance worker load.
app.conf.worker_prefetch_multiplier = 1

app.conf.task_soft_time_limit = 1200  # 20 minutes
app.conf.task_time_limit = 1500       # 25 minutes, hard limit

app.conf.broker_heartbeat = 30  # Increase Redis heartbeat check interval
app.conf.broker_connection_timeout = 10  # Time in seconds to wait for connection
app.conf.broker_connection_retry_on_startup = True  # Ensure retries

app.conf.task_acks_late = True  # Acknowledge task only after completion
app.conf.task_reject_on_worker_lost = True  # Reject task if worker is lost
app.conf.task_default_retry_delay = 300  # Retry after 5 minutes
app.conf.task_max_retries = 5  # Max retries for failed tasks

# Automatically discover tasks from installed apps (tasks.py).
app.autodiscover_tasks()
Вернуться на верх