Celery stocke les résultats des tâches exécutées dans le backend, et s'ils restent trop longtemps, cela peut occuper de l'espace de stockage et affecter les performances. Django-celery-beat et Celery offrent chacun une option pour nettoyer les données du backend afin de résoudre ce problème. Dans cet article, nous allons explorer le `CELERY_TASK_RESULT_EXPIRES` et la tâche `celery.backend_cleanup` de Django-celery-beat, ainsi que les recommandations d'utilisation de ces deux configurations.

1. CELERY_TASK_RESULT_EXPIRES : option pour définir la durée de vie des résultats des tâches

CELERY_TASK_RESULT_EXPIRES est une option qui définit combien de temps les résultats des tâches individuelles resteront dans le backend, en secondes. Cette configuration fonctionne avec un mécanisme TTL (Time-To-Live) lorsque les tâches Celery sont planifiées, ce qui permet de supprimer automatiquement les résultats des tâches après un temps spécifié.

  • Exemple de configuration:
    CELERY_TASK_RESULT_EXPIRES = 86400  # 24 heures (en secondes)
  • Avec cette configuration, les résultats des tâches seront supprimés automatiquement du backend après 24 heures. L'ajustement de la durée de vie par tâche est utile pour éviter que de données inutiles ne s'accumulent dans le backend.

2. celery.backend_cleanup de Django-celery-beat : tâche de nettoyage périodique

Lors de l'utilisation de Django-celery-beat, la tâche celery.backend_cleanup nettoie périodiquement les anciens résultats de tâches accumulés dans le backend. Cette tâche de nettoyage est programmée pour s'exécuter une fois par jour par défaut, et il est possible d'ajuster la fréquence via l'administration Django pour l'exécuter plus ou moins souvent. La tâche de nettoyage périodique empêche naturellement l'accumulation de données anciennes dans le backend, même sans configuration TTL.

  • Exemple de réglage de fréquence : Dans l'administration Django, vous pouvez ajuster la fréquence de celery.backend_cleanup pour que, si vous avez beaucoup de données en temps réel, ce soit plus court ; sinon, gardez la valeur par défaut (un jour).

3. Conclusion : quelle configuration choisir ?

Les options CELERY_TASK_RESULT_EXPIRES et celery.backend_cleanup ont des fonctionnalités qui se chevauchent, donc il est suffisant d'utiliser l'une ou l'autre pour gérer la mémoire du backend. Cependant, il est également possible d'activer les deux configurations si nécessaire.

  • Si vous utilisez Django-celery-beat : la tâche celery.backend_cleanup nettoie périodiquement le backend, donc il est généralement suffisant de programmer principalement cette tâche, sans configurer TTL.
  • Si vous planifiez les tâches Celery par code : si vous n'utilisez pas Django-celery-beat et que vous écrivez vous-même le code pour planifier les tâches, il est recommandé de configurer CELERY_TASK_RESULT_EXPIRES pour gérer le TTL. Cela permet de supprimer automatiquement les résultats de chaque tâche après le temps défini, ainsi la mémoire du backend est gérée efficacement.

Résumé : La gestion du backend peut être effectuée avec l'une ou l'autre des tâches de nettoyage de Django-celery-beat ou la configuration TTL, et pour les utilisateurs de Django-celery-beat, la programmation de la tâche de nettoyage est appropriée. Dans le cas de la planification par code, le réglage TTL est recommandé. Les deux configurations peuvent également être utilisées ensemble pour une gestion plus détaillée des données.

Timeline of TTL and cleanup task for Celery task result management