Lorsque vous utilisez Django Celery Beat pour planifier des tâches, vous pouvez envisager d'utiliser one-off: True pour vous assurer que la tâche ne s'exécute qu'une seule fois. Cependant, des questions fréquentes se posent concernant l'état du champ enabled après l'exécution de la tâche. Dans cet article, nous allons examiner le fonctionnement de one-off, le rôle du champ enabled, et comment les utiliser efficacement.


1. Rôle de one-off dans Celery Beat

L'option one-off dans Celery Beat est utilisée pour garantir que les tâches planifiées ne s'exécutent qu'une seule fois. Une tâche configurée avec one-off: True ne sera pas réexécutée après son exécution, et Celery Beat exclura cette tâche de la liste d'exécution.

Relation entre one-off et les méthodes de planification

  • Planification clocked:

    Cette méthode exécute une tâche à une heure précise. Une fois le moment de l'exécution passé, la tâche ne sera pas réexécutée, donc elle se comporte de manière similaire à one-off.

    En ajoutant one-off: True: Cela garantit que la tâche ne se réactive pas même après l'heure d'exécution.

  • Plans interval et crontab:

    Ces plans sont conçus pour exécuter les tâches périodiquement.

    Lorsque one-off: True est défini: La tâche ne s'exécutera qu'une seule fois, indépendamment de cette périodicité.


2. Changements d'état de enabled après l'exécution

Comportement par défaut du champ enabled

Après l'exécution d'une tâche, la valeur de enabled ne change pas automatiquement. Cela signifie que, même si une tâche est configurée avec one-off: True, enabled restera à True. Cela a les implications suivantes :

  1. Celery Beat ne considère que les tâches où enabled est à True pour la planification.
  2. Avec la configuration one-off, la tâche est exclue de la planification après son exécution.

Par conséquent, même sans modifier explicitement le champ enabled, il n'y a pas de risque que la tâche se réexécute.

Un diagramme de flux expliquant one-off et enabled

3. Faut-il changer enabled en False ?

Raisons de ne pas changer

  • Celery Beat gère la non-réexécution des tâches uniquement avec la configuration one-off: True.
  • Si les développeurs comprennent et gèrent clairement l'état des tâches, il est sûr de ne pas modifier enabled.

Quand il est avantageux de changer

  1. Renforcer la sécurité:

    Empêche quelqu'un d'éventuellement retirer ou modifier la configuration one-off par inadvertance.

  2. Clarifier l'intention:

    Indique explicitement que la tâche est terminée, facilitant la compréhension pour le gestionnaire par la suite.

  3. Optimiser la gestion des ressources:

    Si de nombreuses tâches sont dans l'état enabled: True, cela peut aider à réduire la charge sur les requêtes de base de données de Celery Beat.

Comment changer enabled

Après l'exécution d'une tâche, vous pouvez utiliser une logique additionnelle pour définir enabled à False. Par exemple :

from django_celery_beat.models import PeriodicTask

def my_task():
    # Effectuer le contenu de la tâche
    ...
    # Changer la valeur de enabled en False après exécution
    task_name = "my_task_name"
    task = PeriodicTask.objects.get(name=task_name)
    task.enabled = False
    task.save()

4. Un programme clocked est-il suffisant ?

Le plan clocked est conçu pour exécuter une tâche une fois à une heure précise. Par conséquent, une fois l'heure d'exécution passée, la tâche ne sera pas réexécutée, même sans one-off: True.

  • Lorsque seul clocked est utilisé:

    La tâche sera automatiquement désactivée après le temps d'exécution.

    Cependant, des paramètres supplémentaires peuvent être nécessaires pour éviter que la tâche échoue ou soit réactivée manuellement.

  • clocked + one-off: True:

    Assure que la tâche ne se réactive pas et clarifie l'intention.


5. Conclusion : Guide pratique de configuration

  • Si la tâche doit être exécutée une seule fois: Configurez one-off: True pour garantir la sécurité.
  • Il n'est généralement pas nécessaire de changer enabled. Cependant, selon le besoin, vous pouvez le changer en False pour plus de sécurité et de maintenabilité.
  • Dans les cas où clocked est suffisant: Il n'est pas obligatoire de définir one-off.

Une bonne utilisation des options de configuration de Celery Beat peut rendre la gestion des tâches beaucoup plus efficace et sécurisée. Trouvez la configuration optimale pour vos exigences de projet !