Celery результаты задач, сохраненные на бекенде после выполнения, могут занимать место в хранилище и влиять на производительность, если остаются на долгое время. Django-celery-beat и Celery предлагают различные способы для упорядочивания данных на бекенде. В этой статье мы рассмотрим настройку CELERY_TASK_RESULT_EXPIRES и задачу celery.backend_cleanup от Django-celery-beat, а также рекомендации по их использованию.

1. CELERY_TASK_RESULT_EXPIRES: опция настройки срока действия результатов задач

CELERY_TASK_RESULT_EXPIRES - это опция, которая устанавливает, как долго результаты отдельных задач будут храниться на бекенде, в секундах. Эта настройка действует в формате TTL (Time-To-Live), когда задача запланирована на бекенде, и автоматически удаляет результаты задач по истечении указанного времени.

  • Пример настройки:
    CELERY_TASK_RESULT_EXPIRES = 86400  # 24 часа (в секундах)
  • С помощью этой настройки результаты задач будут автоматически удалены из бекенда через 24 часа. Настройка TTL полезна, когда необходимо корректировать срок действия для каждой задачи, чтобы избежать накопления ненужных данных на бекенде.

2. celery.backend_cleanup от Django-celery-beat: периодическая задача очистки

Когда используется Django-celery-beat, задача celery.backend_cleanup обычно периодически очищает старые результаты задач на бекенде. Эта задача очистки по умолчанию планируется на выполнение раз в день, и вы можете настроить период выполнения через Django Admin, чтобы выполнять ее чаще или реже. Периодическая задача очистки помогает предотвратить накопление старых данных на бекенде даже без настройки TTL.

  • Пример настройки периода: Настроив период celery.backend_cleanup в Django Admin, вы можете установить его коротким, если накапливается много данных в реальном времени, или оставить по умолчанию (раз в день), если это не нужно.

3. Заключение: какую настройку выбрать?

CELERY_TASK_RESULT_EXPIRES и celery.backend_cleanup выполняют перекрывающиеся функции, поэтому достаточно использовать одну из двух для управления памятью на бекенде. Однако, при необходимости, можно одновременно активировать обе настройки.

  • В случае использования Django-celery-beat: поскольку задача celery.backend_cleanup периодически очищает бекенд, достаточно планировать эту задачу очистки, и вы можете не настраивать TTL.
  • В случае, если задачи Celery планируются через код: если вы пишете код для планирования задач самостоятельно, не используя Django-celery-beat, рекомендуется настроить CELERY_TASK_RESULT_EXPIRES для управления TTL. Это позволит автоматически удалять результаты каждой задачи после установленного времени, эффективно управляя памятью на бекенде.

Сводка: Техническое обслуживание бекенда возможно с помощью одной из задач очистки Django-celery-beat или настройки TTL, но для пользователей Django-celery-beat планирование задачи очистки более подходит, в то время как для планирования через код рекомендуется настройка TTL. Также можно совместно использовать обе настройки для более детального управления данными.

Иллюстрация временной шкалы управления задачи TTL и очистки результатов задач Celery