Bird
Raised Fist0
Djangoframework~10 mins

Celery installation and setup in Django - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to import Celery in your Django project.

Django
from celery import [1]
Drag options to blanks, or click blank then click option'
Aapp
BCelery
Ctask
Dworker
Attempts:
3 left
💡 Hint
Common Mistakes
Importing 'app' or 'task' instead of 'Celery'.
Using lowercase 'celery'.
2fill in blank
medium

Complete the code to create a Celery app instance named 'app'.

Django
app = Celery('[1]')
Drag options to blanks, or click blank then click option'
Amyproject
Bcelery_app
Cdjango_project
Dtasks
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'celery_app' or 'tasks' which are not project names.
Using 'django_project' as a generic name.
3fill in blank
hard

Fix the error in the code to load Django settings into Celery.

Django
app.config_from_object('[1]')
Drag options to blanks, or click blank then click option'
Adjango.settings
Bsettings
Cdjango.conf.settings
Ddjango.conf:settings
Attempts:
3 left
💡 Hint
Common Mistakes
Using dot notation instead of colon.
Using just 'settings' without module.
4fill in blank
hard

Fill both blanks to auto-discover tasks in Django apps.

Django
app.[1]_tasks()  # Auto-discover tasks in installed apps

app.conf.broker_url = '[2]'
Drag options to blanks, or click blank then click option'
Aautodiscover
Bredis://localhost:6379/0
Cdiscover
Damqp://guest@localhost//
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'discover_tasks' instead of 'autodiscover_tasks'.
Using AMQP URL when Redis is expected.
5fill in blank
hard

Fill all three blanks to define a simple Celery task function.

Django
from celery import shared_task

@shared_task
def [1](x, y):
    return x [2] y  # Returns sum

result = [3](4, 5).delay()
Drag options to blanks, or click blank then click option'
Aadd
B+
Dsum
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'sum' as function name which is a built-in function.
Using '-' or '*' instead of '+'.

Practice

(1/5)
1. What is the main purpose of using Celery in a Django project?
easy
A. To replace Django's built-in ORM
B. To create database models automatically
C. To style the frontend of the Django app
D. To run time-consuming tasks in the background without blocking the main app

Solution

  1. Step 1: Understand Celery's role

    Celery is a tool for running tasks asynchronously, meaning it handles tasks in the background.
  2. Step 2: Compare options

    Creating database models automatically, styling the frontend of the Django app, and replacing Django's built-in ORM are unrelated to Celery; only running time-consuming tasks in the background without blocking the main app correctly describes its purpose.
  3. Final Answer:

    To run time-consuming tasks in the background without blocking the main app -> Option D
  4. Quick Check:

    Celery = background task runner [OK]
Hint: Celery runs slow tasks behind scenes to keep app fast [OK]
Common Mistakes:
  • Thinking Celery manages database models
  • Confusing Celery with frontend styling tools
  • Assuming Celery replaces Django ORM
2. Which command correctly installs Celery and Redis as the message broker for a Django project?
easy
A. pip install celery redis
B. pip install django-celery
C. pip install celery-django redis-server
D. pip install celery-redis

Solution

  1. Step 1: Identify the correct packages

    Celery requires the 'celery' package and a broker like Redis, installed via 'redis' package.
  2. Step 2: Evaluate commands

    Only 'pip install celery redis' installs both needed packages correctly; others are incorrect or non-existent.
  3. Final Answer:

    pip install celery redis -> Option A
  4. Quick Check:

    Install celery and redis packages = pip install celery redis [OK]
Hint: Use pip install celery redis to get both packages [OK]
Common Mistakes:
  • Installing 'django-celery' which is outdated
  • Using non-existent package names
  • Forgetting to install Redis client
3. Given this Celery task in Django:
@shared_task
def add(x, y):
    return x + y

result = add.delay(4, 5)
print(result.get(timeout=10))
What will be printed when this code runs correctly?
medium
A. 9
B. delay object
C. None
D. Error: get() not found

Solution

  1. Step 1: Understand task execution

    The task 'add' runs asynchronously; calling 'delay(4, 5)' queues the task to add 4 and 5.
  2. Step 2: Retrieve result with get()

    'result.get(timeout=10)' waits for the task to finish and returns the sum 9.
  3. Final Answer:

    9 -> Option A
  4. Quick Check:

    add(4,5) = 9 [OK]
Hint: delay queues task; get() fetches result [OK]
Common Mistakes:
  • Expecting delay() to return result immediately
  • Confusing task object with result value
  • Not using get() to wait for task completion
4. You wrote this Celery setup in your Django project:
from celery import Celery
app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
But your tasks are not running. What is the most likely mistake?
medium
A. Using wrong Celery import statement
B. Not running a message broker like Redis or RabbitMQ
C. Missing @shared_task decorator on tasks
D. Not calling app.start() in settings.py

Solution

  1. Step 1: Check broker setup

    Celery needs a running message broker (Redis or RabbitMQ) to send and receive tasks.
  2. Step 2: Analyze other options

    Imports and decorators are correct; app.start() is not required in settings.py; missing broker is common cause.
  3. Final Answer:

    Not running a message broker like Redis or RabbitMQ -> Option B
  4. Quick Check:

    Broker must run for tasks to work [OK]
Hint: Always start Redis or RabbitMQ before Celery workers [OK]
Common Mistakes:
  • Forgetting to start Redis or RabbitMQ server
  • Assuming Celery works without a broker
  • Misplacing @shared_task decorator
5. You want to configure Celery in your Django project to use Redis as the broker and ensure tasks are auto-discovered. Which of the following is the correct minimal setup in your celery.py file?
hard
A. from celery import Celery app = Celery('proj') app.config_from_object('settings') app.autodiscover_tasks()
B. from celery import Celery app = Celery('proj') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks()
C. from celery import Celery app = Celery('proj', broker='redis://localhost:6379/0') app.autodiscover_tasks()
D. from celery import Celery app = Celery('proj') app.broker_url = 'redis://localhost:6379/0' app.autodiscover_tasks()

Solution

  1. Step 1: Set broker URL directly in Celery instance

    from celery import Celery app = Celery('proj', broker='redis://localhost:6379/0') app.autodiscover_tasks() correctly passes Redis broker URL when creating Celery app, which is a minimal working setup.
  2. Step 2: Evaluate other options

    The first uses an invalid path to settings ('settings' instead of 'django.conf:settings'); the second requires defining CELERY_BROKER_URL in Django settings.py first; the third is correct syntax-wise but setting broker_url attribute after creation is less minimal than passing in constructor.
  3. Final Answer:

    from celery import Celery app = Celery('proj', broker='redis://localhost:6379/0') app.autodiscover_tasks() -> Option C
  4. Quick Check:

    Broker URL in constructor = from celery import Celery app = Celery('proj', broker='redis://localhost:6379/0') app.autodiscover_tasks() [OK]
Hint: Pass broker URL directly to Celery constructor for quick setup [OK]
Common Mistakes:
  • Setting broker_url attribute instead of passing in constructor
  • Misconfiguring config_from_object with wrong settings path
  • Omitting broker URL causing connection failure