Django-celery-results не истекает, даже если установлено значение CELERY_RESULT_EXPIRES

У меня есть ежеминутная задача, выполняемая на celery beat, и я использую rabbimq в качестве брокера и имею postgresql в качестве базы данных.

Поскольку моя задача выполняется каждую минуту и я сохраняю результат задачи в базе данных, размер моей базы данных постоянно увеличивается день ото дня. Я искал вопрос об истечении срока хранения результата задачи. Согласно документации по celery, существует конфигурация CELERY_RESULT_EXPIRES, которая использует celery beat для выполнения очистки. Похоже, что это происходит не так, как ожидалось.

Что я упускаю или делаю неправильно? Любые советы будут очень полезны.

Ниже приведены мои настройки celery, определенные в моем django settings.py

CELERY_BROKER_URL = os.getenv('CELERY_BROKER_URL', 'amqp://localhost')
CELERY_RESULT_BACKEND = 'django-db'
CELERY_CACHE_BACKEND = 'django-cache'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ENABLE_UTC = False
CELERY_TIMEZONE = 'UTC'
CELERY_CREATE_MISSING_QUEUES = False
CELERY_DEFAULT_QUEUE = 'celery'
CELERY_TASK_TRACK_STARTED = True
CELERY_SEND_EVENTS = True
CELERY_SEND_SENT_EVENT = True
CELERY_WORKER_MAX_TASKS_PER_CHILD = 25
CELERY_TASK_REJECT_ON_WORKER_LOST = True
CELERYD_TIME_LIMIT = 60
CELERYD_SOFT_TIME_LIMIT = 50
CELERY_ACKS_LATE = True
CELERYD_PREFETCH_MULTIPLIER = 1
CELERY_RESULT_EXPIRES = 1 * 60

Ниже приведен мой файл celery.py

import django
import logging
from celery import Celery
from celery.schedules import crontab
from kombu import Exchange, Queue

log = logging.getLogger(__name__)

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'xxx.settings')
django.setup()

app = Celery('xxx')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

app.conf.task_queues = (
    Queue('celery', Exchange('celery', type='direct'), routing_key='celery'),
    Queue('project_indicators', Exchange('high', type='direct'), routing_key='high'),
)

app.conf.beat_schedule = {
    'every-minute-task': {
        'task': 'every_minute_task',
        'schedule': crontab(),
    },
}
Вернуться на верх