📖 Scenario: You are building a simple Flask web application that needs to perform background tasks without making users wait. To do this, you will integrate Celery, a tool that helps run tasks in the background.
🎯 Goal: Build a Flask app with Celery integration that can send a background task to add two numbers and return the result asynchronously.
📋 What You'll Learn
Create a Flask app instance
Set up Celery with Flask configuration
Define a simple Celery task to add two numbers
Trigger the Celery task from Flask
💡 Why This Matters
🌍 Real World
Background tasks like sending emails, processing images, or running long calculations without blocking the web server.
💼 Career
Understanding Celery integration is important for backend developers working with Flask to build scalable and responsive web applications.
Progress0 / 4 steps
1
Create Flask app instance
Create a Flask app instance called app using Flask(__name__).
Flask
Hint
Use Flask(__name__) to create the app instance.
2
Configure Celery with Flask settings
Create a Celery instance called celery and configure it with the Flask app's broker URL app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'.
Flask
Hint
Set app.config['CELERY_BROKER_URL'] before creating the Celery instance.
3
Define a Celery task to add two numbers
Define a Celery task called add using the @celery.task decorator that takes two arguments x and y and returns their sum.
Flask
Hint
Use @celery.task to decorate the function add.
4
Trigger the Celery task from Flask route
Create a Flask route /add that calls the Celery task add.delay(4, 6) and returns the task id as a string.
Flask
Hint
Use @app.route('/add') to create the route and call add.delay(4, 6) inside the function.
Practice
(1/5)
1. What is the main purpose of integrating Celery with a Flask application?
easy
A. To run tasks in the background without blocking the main app
B. To create HTML templates for the Flask app
C. To handle user authentication and sessions
D. To serve static files like images and CSS
Solution
Step 1: Understand Celery's role
Celery is designed to run tasks asynchronously, meaning it handles work in the background.
Step 2: Connect to Flask app purpose
Flask apps use Celery to keep the app responsive by offloading long tasks.
Final Answer:
To run tasks in the background without blocking the main app -> Option A
Quick Check:
Celery = background tasks [OK]
Hint: Celery = background task runner in Flask apps [OK]
Common Mistakes:
Thinking Celery manages templates
Confusing Celery with user login features
Assuming Celery serves static files
2. Which of the following is the correct way to define a Celery task in a Flask app?
easy
A. @celery_app.task\ndef add(x, y): return x + y
B. celery_app.run_task(add)
C. @app.route('/task')\ndef task(): pass
D. def task(): pass
Solution
Step 1: Identify Celery task decorator
Celery tasks are defined using the @celery_app.task decorator.
Step 2: Check syntax correctness
@celery_app.task\ndef add(x, y): return x + y correctly decorates a function to become a Celery task.
Final Answer:
@celery_app.task\ndef add(x, y): return x + y -> Option A
Quick Check:
Celery task = @celery_app.task decorator [OK]
Hint: Use @celery_app.task to define tasks [OK]
Common Mistakes:
Forgetting the @celery_app.task decorator
Using Flask route decorators for tasks
Calling celery_app.run_task which is invalid
3. Given this code snippet in a Flask app with Celery:
@celery_app.task
def multiply(x, y):
return x * y
result = multiply.delay(3, 4)
print(result.get())
What will be printed?
medium
A. A task object reference
B. null
C. 12
D. An error because delay() is not valid
Solution
Step 1: Understand delay() usage
Calling multiply.delay(3, 4) sends the task to Celery to run asynchronously.
Step 2: Using get() to wait for result
result.get() waits for the task to finish and returns the output, which is 3 * 4 = 12.
Final Answer:
12 -> Option C
Quick Check:
delay() runs task, get() returns result [OK]
Hint: delay() runs task, get() fetches result [OK]
Common Mistakes:
Thinking delay() returns the result immediately
Confusing task object with result value
Assuming delay() is invalid in Celery
4. You wrote this Celery task in your Flask app:
@celery_app.task
def add(x, y):
return x + y
But when you call add.delay(2, 3), it raises an IndentationError. What is the problem?
medium
A. delay() cannot be called on tasks
B. The function body is not indented properly
C. You forgot to import Celery
D. The decorator syntax is incorrect
Solution
Step 1: Check function indentation
Python requires the function body to be indented under the def line.
Step 2: Identify error cause
Here, return x + y is not indented, causing IndentationError.
Final Answer:
The function body is not indented properly -> Option B
Quick Check:
Python needs indented function bodies [OK]
Hint: Indent function body under def line [OK]
Common Mistakes:
Ignoring Python indentation rules
Assuming delay() is invalid
Thinking decorator syntax is wrong
5. You want to integrate Celery with Flask using Redis as the broker. Which steps correctly describe the setup process?
hard
A. Install Celery only, define tasks without decorator, call tasks directly, no broker needed
B. Install Flask-Login, configure Celery with SQLite, define tasks with @app.route, call tasks with run()
C. Install Redis, configure Flask routes for tasks, use delay() without decorator, run Redis server
D. Install Redis, configure Celery with Redis URL, define tasks with @celery_app.task, call tasks with delay()
Solution
Step 1: Setup Redis broker
Redis must be installed and running as the message broker for Celery.
Step 2: Configure Celery and define tasks
Celery is configured with Redis URL, tasks use @celery_app.task, and are called with delay().
Final Answer:
Install Redis, configure Celery with Redis URL, define tasks with @celery_app.task, call tasks with delay() -> Option D