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
etcrontab
: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 :
- Celery Beat ne considère que les tâches où
enabled
est àTrue
pour la planification. - 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.

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
- Renforcer la sécurité:
Empêche quelqu'un d'éventuellement retirer ou modifier la configuration
one-off
par inadvertance. - Clarifier l'intention:
Indique explicitement que la tâche est terminée, facilitant la compréhension pour le gestionnaire par la suite.
- 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 enFalse
pour plus de sécurité et de maintenabilité. - Dans les cas où
clocked
est suffisant: Il n'est pas obligatoire de définirone-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 !
Add a New Comment