🎸 Django Intermediate

What is Django Celery for background tasks?

Answer

Celery is the most popular Python task queue, used with Django for asynchronous/background task execution. Setup: pip install celery redis django-celery-results. Create celery.py in project root: from celery import Celery import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") app = Celery("myproject") app.config_from_object("django.conf:settings", namespace="CELERY") app.autodiscover_tasks(). Settings: CELERY_BROKER_URL = "redis://localhost:6379/0" CELERY_RESULT_BACKEND = "django-db" # or redis:// CELERY_ACCEPT_CONTENT = ["json"] CELERY_TASK_SERIALIZER = "json". Defining tasks: from celery import shared_task @shared_task(bind=True, max_retries=3, default_retry_delay=60) def send_welcome_email(self, user_id): try: user = User.objects.get(id=user_id) send_email(user.email, "Welcome!", "welcome.html") except Exception as exc: raise self.retry(exc=exc). Calling tasks: send_welcome_email.delay(user.id) # Async, returns AsyncResult send_welcome_email.apply_async(args=[user.id], countdown=60) # Delay 60s send_welcome_email.apply_async(args=[user.id], eta=datetime(2024, 1, 15)). Periodic tasks (beat): CELERY_BEAT_SCHEDULE = {"send-daily-report": {"task": "myapp.tasks.daily_report", "schedule": crontab(hour=8, minute=0)}}. Run: celery -A myproject worker -l info (worker) and celery -A myproject beat -l info (scheduler). Monitoring: Flower — web UI for monitoring Celery workers and tasks.