In het vorige deel hebben we via Django-Celery-Beat: Hoe je een geplande taak aanmaakt de basisprincipes van het aanmaken van een geplande taak in Django-Celery-Beat bekeken.
📌 Klik op de titel om de vorige post ook te bekijken!
Echter, in echte projecten is het simpelweg elke keer op een gepland tijdstip uitvoeren vaak niet voldoende.
- Je moet mogelijk de uitvoering beperken tot specifieke tijden,
- de uitvoeringsfrequentie dynamisch aanpassen,
- de taak deactiveren onder specifieke voorwaarden, of
- instellen dat de reservering automatisch wordt opgeheven na een bepaalde datum.
Om deze complexe logica aan te pakken, zullen we in dit deel dieper ingaan op het PeriodicTask-model van Django-Celery-Beat en de verschillende velden en instellingen bekijken! 🚀
1️⃣ Instelling van PeriodicTask met update_or_create
In echte services is het vaak nuttiger om een eenmaal aangemaakte geplande taak te wijzigen in plaats van deze te laten staan.
Daarom is het handiger om gebruik te maken van de update_or_create()
methode in plaats van PeriodicTask.objects.create()
.
📌 Als je update_or_create()
gebruikt,
- wordt een bestaande taak geüpdatet
- en wordt er een nieuwe aangemaakt als deze niet bestaat
Dat betekent dat het mogelijk is om een geplande taak met dezelfde naam te overschrijven, wat onnodige duplicaten voorkomt.
2️⃣ PeriodicTask.interval veld en IntervalSchedule model
De PeriodicTask
van Django-Celery-Beat maakt het mogelijk om de herhalingsfrequentie in te stellen via het interval
veld.
Dit interval
veld is verbonden met het IntervalSchedule
model, dus je moet eerst een IntervalSchedule
instantie aanmaken en deze vervolgens in de PeriodicTask
verwijzen.
Dat wil zeggen, om een geplande taak te registreren:
- Eerst een
IntervalSchedule
instantie aanmaken - verbind vervolgens de gemaakte
IntervalSchedule
met dePeriodicTask
3️⃣ IntervalSchedule veldopties
Veldnaam | Beschrijving | Voorbeeld waarden |
---|---|---|
every |
Numerieke waarde van de herhalingsfrequentie | 10 , 30 , 2 |
period |
Eenheid van de herhalingsfrequentie | IntervalSchedule.SECONDS , IntervalSchedule.MINUTES , IntervalSchedule.HOURS , IntervalSchedule.DAYS |
4️⃣ Voorbeeld van PeriodicTask instelling met update_or_create
from django_celery_beat.models import PeriodicTask, IntervalSchedule
import json
# IntervalSchedule aanmaken (elke 10 minuten)
schedule, created = IntervalSchedule.objects.get_or_create(
every=10,
period=IntervalSchedule.MINUTES
)
# PeriodicTask aanmaken of updaten
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️⃣ Overige veldbeschrijvingen van PeriodicTask
Veldnaam | Beschrijving | Voorbeeld |
---|---|---|
name |
Unieke naam van de taak | "send_report_task" |
interval |
Uitvoerfrequentie (IntervalSchedule referentie) |
schedule |
crontab |
Wanneer uitgevoerd moet worden op een specifiek tijdstip (CrontabSchedule referentie) |
None |
clocked |
Wanneer slechts één keer moet worden uitgevoerd op een specifiek tijdstip (ClockedSchedule referentie) |
None |
task |
De uit te voeren Celery-taak | "myapp.tasks.send_report" |
args |
Argumenten om naar de functie te sturen (in JSON-formaat) | json.dumps([123, "email@example.com"]) |
kwargs |
Sleutelargumenten om naar de functie te sturen (in JSON-formaat) | json.dumps({"priority": "high"}) |
enabled |
Of het uitgevoerd moet worden | True of False |
one_off |
Eenmalig uitvoeren en beëindigen | True of False |
📌 Als one_off=True
is ingesteld, wordt de taak na één uitvoering gedeactiveerd, maar niet verwijderd
📌 Met het clocked
veld kan je een taak inplannen die op een exact tijdstip slechts één keer uitgevoerd wordt.
🎯 Conclusie: Maak gebruik van update_or_create
voor flexibele taakbeheer!
📌 Bij het registreren van geplande taken in Django-Celery-Beat, maakt update_or_create()
het eenvoudig om bestaande taken te wijzigen
📌 Het PeriodicTask.interval
veld verwijst naar IntervalSchedule
, dus je moet eerst een IntervalSchedule
instantie aanmaken en deze verbinden.
📌 Bij het beheren van complexe geplande taken kun je flexibeler instellen door velden zoals args
, kwargs
, enabled
, one_off
, clocked
te gebruiken.
🔥 Vooruitblik op de volgende aflevering
In deze aflevering hebben we gezien hoe je PeriodicTask flexibeler kunt aanmaken en bewerken.
In de volgende aflevering zullen we de instellingen voor het plannen van taken op specifieke tijden met Crontab en het éénmalig uitvoeren van taken met Clocked bespreken.
Als je meer diepgaande manieren wilt leren om Celery te gebruiken, kijk dan uit naar de volgende aflevering! 🚀
En als je meer blogs over Celery wilt zien,
zoek dan in de lijst met 'Vergelijkbare berichten' hieronder of zoek naar "Celery" in de zoekbalk rechtsboven! 😊
댓글이 없습니다.