Im vorherigen Beitrag haben wir Django-Celery-Beat: So erstellen Sie geplante Aufgaben behandelt und die grundlegenden Methoden zur Erstellung geplanter Aufgaben in Django-Celery-Beat besprochen.
📌 Klicken Sie auf den Titel, um den vorherigen Beitrag zu überprüfen!
In echten Projekten reicht es jedoch oft nicht aus, einfach zu festgelegten Zeiten wiederholt auszuführen.
- Es kann notwendig sein, die Ausführung auf bestimmte Zeiten zu beschränken,
- den Ausführungszyklus dynamisch zu ändern, oder
- Aufgaben unter bestimmten Bedingungen zu deaktivieren, oder
- so zu konfigurieren, dass die Planung nach einem bestimmten Datum automatisch aufgehoben wird.
Um mit dieser komplexen Logik umzugehen, werden wir in diesem Beitrag das PeriodicTask-Modell von Django-Celery-Beat eingehender betrachten und verschiedene Felder und Konfigurationsmethoden untersuchen! 🚀
1️⃣ Einstellungen für PeriodicTask mit update_or_create
In echten Dienstleistungen wird oft nicht nur eine einmal erstellte geplante Aufgabe belassen, sondern sie wird häufig an die Anforderungen und veränderten Bedingungen des Benutzers angepasst.
Deshalb ist es nützlicher, die update_or_create()
-Methode zu verwenden, anstatt PeriodicTask.objects.create()
.
📌 Wenn Sie update_or_create()
verwenden,
- werden bereits existierende Aufgaben aktualisiert
- und wenn sie nicht existieren, wird eine neue erstellt
Das bedeutet, dass Sie bestehende geplante Aufgaben mit dem gleichen Namen überschreiben können, wodurch unnötige doppelte Instanzen vermieden werden.
2️⃣ Feld PeriodicTask.interval und das Modell IntervalSchedule
Mit dem PeriodicTask
von Django-Celery-Beat können Sie die Wiederholungsintervalle über das Feld interval
festlegen.
Dieses interval
-Feld ist mit dem IntervalSchedule
-Modell verbunden, weshalb Sie zuerst eine IntervalSchedule
-Instanz erstellen und dann in PeriodicTask
darauf verweisen müssen.
Das bedeutet, um eine geplante Aufgabe zu registrieren:
- Erstellen Sie zuerst eine
IntervalSchedule
-Instanz - und verbinden Sie dann die erstellte
IntervalSchedule
mitPeriodicTask
3️⃣ Optionen für die IntervalSchedule-Felder
Feldname | Beschreibung | Wertbeispiel |
---|---|---|
every |
Zahl für den Wiederholungszyklus | 10 , 30 , 2 |
period |
Einheit des Wiederholungszyklus | IntervalSchedule.SECONDS , IntervalSchedule.MINUTES , IntervalSchedule.HOURS , IntervalSchedule.DAYS |
4️⃣ Beispiel für das Einrichten von PeriodicTask mit update_or_create
from django_celery_beat.models import PeriodicTask, IntervalSchedule
import json
# IntervalSchedule erstellen (alle 10 Minuten)
schedule, created = IntervalSchedule.objects.get_or_create(
every=10,
period=IntervalSchedule.MINUTES
)
# PeriodicTask erstellen oder aktualisieren
task, created = PeriodicTask.objects.update_or_create(
name="send_reminder_email",
defaults={
"interval": schedule,
"task": "myapp.tasks.send_reminder_email",
"args": json.dumps([1]),
"enabled": True,
}
)
5️⃣ Erklärung anderer Felder des PeriodicTask
Feldname | Beschreibung | Beispiel |
---|---|---|
name |
Eindeutiger Name der Aufgabe | "send_report_task" |
interval |
Ausführungsintervall (IntervalSchedule Verweis) |
schedule |
crontab |
Für die Ausführung zu einer bestimmten Zeit (CrontabSchedule Verweis) |
None |
clocked |
Für die einmalige Ausführung zu einem bestimmten Zeitpunkt (ClockedSchedule Verweis) |
None |
task |
Zu ausführende Celery-Aufgabe | "myapp.tasks.send_report" |
args |
Argumente, die an die Funktion übergeben werden (im JSON-Format) | json.dumps([123, "email@example.com"]) |
kwargs |
Keyword-Argumente, die an die Funktion übergeben werden (im JSON-Format) | json.dumps({"priority": "high"}) |
enabled |
Ob die Aufgabe ausgeführt wird oder nicht | True oder False |
one_off |
Einmalige Ausführung und Abschluss | True oder False |
📌 Wenn Sie one_off=True
festlegen, wird die Aufgabe nach einmaliger Ausführung deaktiviert, jedoch nicht gelöscht
📌 Mit dem clocked
-Feld können Sie eine Aufgabe planen, die genau zu einer bestimmten Zeit einmal ausgeführt wird.
🎯 Fazit: Nutzen Sie update_or_create
, um geplante Aufgaben flexibel zu verwalten!
📌 Wenn Sie in Django-Celery-Beat geplante Aufgaben registrieren, können Sie die bestehende Aufgabe einfach mit update_or_create()
anpassen.
📌 Das PeriodicTask.interval
-Feld bezieht sich auf IntervalSchedule
, weshalb Sie zuerst eine IntervalSchedule
-Instanz erstellen und dann verbinden müssen.
📌 Bei der Verwaltung komplexer geplanter Aufgaben können Sie Felder wie args
, kwargs
, enabled
, one_off
und clocked
nutzen, um flexibler zu konfigurieren.
🔥 Vorschau auf den nächsten Beitrag
In diesem Beitrag haben wir gelernt, wie man PeriodicTask flexibler erstellt und anpasst.
Im nächsten Beitrag werden wir geplante Aufgaben mit Crontab für die Ausführung zu bestimmten Zeiten und Clocked für die einmalige Ausführung zu bestimmten Zeiten behandeln.
Wenn Sie mehr über die tiefere Nutzung von Celery erfahren möchten, bleiben Sie gespannt auf den nächsten Beitrag! 🚀
Und wenn Sie mehr Beiträge über Celery sehen möchten,
schauen Sie sich die Liste der 'Ähnlichen Beiträge' unten an oder suchen Sie im oberen rechten Suchfeld nach "Celery"! 😊
Add a New Comment