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! 🚀

Django Celery-Beat PeriodicTask illustration

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,

  1. werden bereits existierende Aufgaben aktualisiert
  2. 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:

  1. Erstellen Sie zuerst eine IntervalSchedule-Instanz
  2. und verbinden Sie dann die erstellte IntervalSchedule mit PeriodicTask

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"! 😊