Bij het ontwikkelen van webapplicaties komt het vaak voor dat je tijdrovende taken moet uitvoeren. Bijvoorbeeld:

  • Wanneer een gebruiker zich registreert, moet er een bevestigingsmail worden verzonden.
  • Er moet elke nacht om middernacht een automatische gegevensopruiming plaatsvinden.
  • Wanneer een gebruiker een bepaalde taak plant, moet deze op de afgesproken tijd worden uitgevoerd.

Django werkt standaard met de principes van onmiddellijke reacties op aanvragen, wat betekent dat er behoefte is aan een manier om tijdrovende taken asynchroon te verwerken. En hier komt Celery om de hoek kijken! 🚀

Celery is een krachtig hulpmiddel dat je helpt bij het uitvoeren van asynchrone taken binnen Django, en Celery-Beat helpt je om taken op vooraf ingestelde tijden uit te voeren.

Django Celery-Beat taakplanning illustratie

1️⃣ Hoe je een geplande taak instelt in Django-Celery-Beat

Er zijn grofweg twee manieren om een geplande taak in Celery-Beat in te stellen.

✅ (1) Geplande instellingen via de Django Admin GUI

Django-Celery-Beat ondersteunt de mogelijkheid om geplande taken rechtstreeks via de Django Admin GUI in te stellen.

📌 Kenmerken
  • Zonder codering kun je eenvoudige instellingen doen om periodieke taken uit te voeren.
  • Via de UI van de Django beheerderspagina kunnen periodieke taken worden ingesteld en aangepast.
  • Maar, omdat het een statische instelling is, kan het moeilijk zijn om het dynamisch te wijzigen in verband met gebruikersverzoeken.
📌 In welke gevallen is dit nuttig?
  • Als er geen interactie tussen de applicatie en de gebruiker nodig is.
  • Bijv. een taak die automatisch gegevens back-upt om middernacht
  • Bijv. een taak die elke maandagmorgen specifieke API-gegevens bijwerkt

✅ (2) Dynamisch geplande taken creëren via Python-code

Je kunt ook geplande taken direct via code creëren in Celery-Beat.

📌 Kenmerken
  • Dynamisch geplande taken maken op basis van gebruikersverzoeken.
  • Geplande taken kunnen gecreëerd, gewijzigd en verwijderd worden via code.
  • Direct vanuit de view periodieke taken registreren zonder langs de admin te gaan.
📌 In welke gevallen is dit nuttig?
  • Wanneer er geplande taken nodig zijn als specifieke verzoeken van gebruikers plaatsvinden.
  • Bijv. als een gebruiker een "geplande order" plaatst, wordt een taak geregistreerd die automatisch na 2 uur wordt geannuleerd.
  • Bijv. als een gebruiker de "e-mailherinnering" functie instelt, wordt er een herinneringsmail op een afgesproken tijd verzonden.

2️⃣ [Praktijk] Geplande taken maken met Python-code

Stap 1: Celery Taak definiëren

from celery import shared_task

@shared_task
def send_reminder_email(user_id):
    # Implementeer hier de logica voor het verzenden van de email
    print(f"📧 Herinneringsmail verzonden naar gebruiker {user_id}!")

Stap 2: PeriodicTask-object aanmaken in Django-Celery-Beat

from django_celery_beat.models import PeriodicTask, IntervalSchedule
import json

# 1️⃣ Maak een interval aan (bijv. om de 10 minuten)
schedule, created = IntervalSchedule.objects.get_or_create(
    every=10,  # elke 10 minuten
    period=IntervalSchedule.MINUTES
)

# 2️⃣ Maak een PeriodicTask aan
task = PeriodicTask.objects.create(
    interval=schedule,  # uitvoeringsinterval
    name="Stuur Herinneringsmail",  # naam van de taak
    task="myapp.tasks.send_reminder_email",  # naam van de uit te voeren Celery-taak
    args=json.dumps([1]),  # gebruikers-ID doorgeven (in dit voorbeeld is dat gebruiker 1)
)

🎯 Conclusie: Celery is essentieel voor Django-ontwikkelaars!

Celery is een essentieel hulpmiddel in Django dat het beheren van asynchrone taken en het inplannen van uitvoeren mogelijk maakt.

Met name met Celery-Beat kun je periodieke taken instellen en deze dynamisch beheren op basis van bepaalde gebeurtenissen.

📌 Samenvattend:

  1. Django-Celery-Beat is een krachtig hulpmiddel voor het uitvoeren van geplande taken.
  2. Met Django Admin (GUI) kunnen periodieke taken eenvoudig worden ingesteld.
  3. Door taken te creëren met Python-code kunnen geplande taken dynamisch worden beheerd in verband met gebruikersverzoeken.
  4. Voor Django-ontwikkelaars is het essentieel om de basisconcepten van Celery en Celery-Beat te begrijpen!

🔥 Volgende aflevering preview

In deze aflevering hebben we een korte introductie gegeven over het creëren van geplande taken via code in Celery-Beat. Maar in de praktijk zullen we gebruikmaken van de verschillende velden van het `PeriodicTask`-model om complexe logica aan te kunnen.

In de volgende aflevering zullen we meer gedetailleerd ingaan op de code voor het plannen van verschillende taken en de rol van elk veld in het `PeriodicTask`-model.

Houd de volgende aflevering in de gaten voor meer diepgaande Celery-toepassingen! 🚀

Als je meer wilt lezen over Celery op de blog,

zoek dan naar "Celery" in de lijst van 'vergelijkbare berichten' hieronder of gebruik de zoekbalk rechtsboven! 😊