Celery is een asynchrone taakwachtrij die wordt gebruikt om taken in je Python-applicatie te verdelen over meerdere threads of machines. Django is een populair raamwerk voor webontwikkeling in Python en kan worden gebruikt met Celery om verschillende tijd- of rekenintensieve taken buiten band te laten uitvoeren.
Om Celery te gebruiken met Django, moet je eerst Celery installeren met pip:
```
pip install celery
```
Vervolgens moet je in je Django-project een nieuw bestand maken, meestal genaamd `celery.py`.
In dit bestand importeer je Celery en configureer je het om te werken met jouw Django-project. Creëer een nieuwe instantie van de `Celery`-klasse en vertel het om jouw Django-instellingen te gebruiken:
```
from future import absolute_import, unicode_literals
import os
from celery import Celery
os.environ.setdefault(‘DJANGO_SETTINGS_MODULE’, ‘my_project.settings’)
app = Celery(‘my_project’)
app.config_from_object(‘django.conf:settings’, namespace=‘CELERY’)
app.autodiscover_tasks()
```
De functie `config_from_object` vertelt Celery om jouw Django-instellingen te gebruiken. De string ‘CELERY’ als namespace argument betekent dat alle Celery-instellingen in jouw Django-configuratie met de ‘CELERY\_’-prefix moeten worden gegeven.
De functie `autodiscover_tasks` vertelt Celery om te zoeken naar taken in jouw geïnstalleerde apps. Zo kun je taken definiëren in jouw app door een bestand genaamd `tasks.py` te maken.
Je moet ook enkele instellingen aan jouw Django-configuratie toevoegen. Eerst vertel je Django om Celery te gebruiken:
```
INSTALLED_APPS = (
…,
‘django_celery_results’, # dit is optioneel
)
```
Dan configureer je Celery om de resultaten te bewaren in de database van jouw Django app (dit is optioneel maar nuttig als je de resultaten van jouw taken wilt bijhouden):
```
CELERY_RESULT_BACKEND = “django-db“
```
Je moet ook een broker instellen die Celery zal gebruiken om taken over jouw werkprocessen te verdelen. Hier zijn enkele voorbeelden van hoe je een broker kunt instellen:
```
CELERY_BROKER_URL = “redis://localhost:6379/0“
Zodra je dit hebt geconfigureerd, kun je in jouw Django-app een nieuwe taak maken door een functie te definiëren en deze te versieren met de `@shared_task`-decorator:
```
from celery import shared_task
@shared_task
def my_task():
# jouw taakcode hier
```
Je kunt deze taak vervolgens elders in jouw code oproepen met de `delay`-methode:
```
my_task.delay()
```
Deze methode zal de taak naar de Celery-berichtbroker sturen die deze in de wachtrij zal plaatsen om later te worden uitgevoerd.
Vergeet niet om een Celery-werknemerproces te starten die de taken uit de wachtrij zal halen en uitvoeren. Je kunt dit doen met het commando:`celery -A my_project worker —loglevel=info`
Bronnen:
- Django-celery Resultaten (https://django-celery-results.readthedocs.io/en/latest/)
- Eerste stappen met Django (https://docs.celeryproject.org/en/stable/django/first-steps-with-django.html)
- Celery Documentatie (https://docs.celeryproject.org/en/stable/getting-started/introduction.html)
- Celery en Django (https://realpython.com/asynchronous-tasks-with-django-and-celery/)