📡 You're offline — showing cached content
New version available!
Quick Access
Tutorials Django Framework Django Celery

Django Celery

5 min read
Run async Django tasks with Celery, Redis broker, and django-celery-beat for scheduled jobs.

Celery with Django

pip install celery django-celery-beat django-celery-results redis

# mysite/celery.py
import os
from celery import Celery

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
app = Celery("mysite")
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()

# settings.py
CELERY_BROKER_URL    = "redis://localhost:6379/0"
CELERY_RESULT_BACKEND = "django-db"
CELERY_BEAT_SCHEDULER = "django_celery_beat.schedulers:DatabaseScheduler"

# tasks.py
from celery import shared_task

@shared_task
def send_welcome_email(user_id):
    user = User.objects.get(pk=user_id)
    send_mail("Welcome!", "Hi!", "noreply@app.com", [user.email])

@shared_task
def generate_report():
    # runs on schedule
    pass

# Dispatch
send_welcome_email.delay(user.id)

# Start worker
celery -A mysite worker -l info
celery -A mysite beat -l info  # for scheduled tasks