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
Recall & Review
beginner
What are startup events in FastAPI?
Startup events are functions that run once when the FastAPI app starts. They are used to set up resources like database connections or caches before the app handles requests.
Click to reveal answer
beginner
How do you register a startup event in FastAPI?
Use the @app.on_event('startup') decorator above an async function. This function will run automatically when the app starts.
Click to reveal answer
beginner
What are shutdown events in FastAPI?
Shutdown events are functions that run once when the FastAPI app is stopping. They help clean up resources like closing database connections or saving state.
Click to reveal answer
beginner
How do you register a shutdown event in FastAPI?
Use the @app.on_event('shutdown') decorator above an async function. This function will run automatically when the app is stopping.
Click to reveal answer
intermediate
Why are startup and shutdown events important in FastAPI?
They help manage resources safely and efficiently by preparing needed services before requests and cleaning up after the app stops, preventing errors and leaks.
Click to reveal answer
Which decorator is used to define a startup event in FastAPI?
A@app.on_start()
B@app.startup()
C@app.event('start')
D@app.on_event('startup')
✗ Incorrect
The correct decorator is @app.on_event('startup') to register a startup event.
When does a shutdown event run in a FastAPI app?
AWhen the app stops
BWhen the app starts
CBefore each request
DAfter each response
✗ Incorrect
Shutdown events run once when the app is stopping to clean up resources.
Can startup and shutdown event functions be synchronous in FastAPI?
AOnly startup can be sync
BNo, they must be async
CYes, but async is recommended
DOnly shutdown can be sync
✗ Incorrect
They can be synchronous, but async functions are recommended for non-blocking operations.
What is a common use case for a startup event?
AClosing database connections
BOpening database connections
CHandling HTTP requests
DLogging user activity
✗ Incorrect
Startup events often open database connections or initialize resources.
What happens if you forget to close resources in a shutdown event?
AIt can cause resource leaks or errors
BThe app will restart
CResources close automatically
DNothing, shutdown events are optional
✗ Incorrect
Not closing resources can cause leaks or errors, so shutdown events help prevent that.
Explain how to use startup and shutdown events in FastAPI and why they matter.
Think about preparing and cleaning up resources around the app lifecycle.
You got /5 concepts.
Describe a real-life example where startup and shutdown events improve a FastAPI app.
Imagine your app needs a database to work smoothly.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of using @app.on_event("startup") in a FastAPI application?
easy
A. To define API routes for the application.
B. To handle HTTP requests from clients.
C. To shut down the server immediately.
D. To run code when the application starts, like initializing resources.
Solution
Step 1: Understand the startup event role
The @app.on_event("startup") decorator marks a function to run when the app starts, useful for setup tasks.
Step 2: Differentiate from other app parts
Handling requests or shutting down are different concerns; startup is specifically for initialization.
Final Answer:
To run code when the application starts, like initializing resources. -> Option D
Quick Check:
Startup event = run code at app start [OK]
Hint: Startup event runs code once when app launches [OK]
Common Mistakes:
Confusing startup with request handling
Thinking startup runs multiple times per request
Mixing startup with shutdown event
2. Which of the following is the correct syntax to define a shutdown event handler in FastAPI?
easy
A. @app.on_event("start")
def cleanup():
print("Cleaning up")
B. @app.shutdown_event
def cleanup():
print("Cleaning up")
C. @app.on_event("shutdown")
def cleanup():
print("Cleaning up")
D. @app.event("shutdown")
def cleanup():
print("Cleaning up")
Solution
Step 1: Recall correct decorator for shutdown
The correct decorator is @app.on_event("shutdown") to run code when the app stops.
Step 2: Check syntax correctness
Options A, B, and D use incorrect decorator names or syntax.
Final Answer:
@app.on_event("shutdown")\ndef cleanup():\n print("Cleaning up") -> Option C
What will be printed when the server starts and then stops?
medium
A. Stopping app (on start), Starting app (on shutdown)
B. Starting app (on start), Stopping app (on shutdown)
C. Only Starting app when server starts
D. No output printed at all
Solution
Step 1: Identify startup and shutdown prints
The startup_event prints "Starting app" when the app starts, and shutdown_event prints "Stopping app" when the app stops.
Step 2: Understand event timing
These events run once each: startup at launch, shutdown at server stop.
Final Answer:
Starting app (on start), Stopping app (on shutdown) -> Option B
Quick Check:
Startup prints "Starting app", shutdown prints "Stopping app" [OK]
Hint: Startup prints on launch, shutdown prints on stop [OK]
Common Mistakes:
Swapping startup and shutdown outputs
Expecting prints on every request
Thinking no output occurs without explicit call
4. This FastAPI code is intended to print a message on shutdown but does not work:
from fastapi import FastAPI
app = FastAPI()
def shutdown_event():
print("App is stopping")
app.on_event("shutdown", shutdown_event)
What is the problem?
medium
A. The decorator syntax is incorrect; should use @app.on_event("shutdown") above the function.
B. FastAPI does not support shutdown events.
C. The function name must be shutdown_handler, not shutdown_event.
D. The function must be async to work as an event handler.
Solution
Step 1: Check decorator usage
The code uses app.on_event("shutdown", shutdown_event) which incorrectly passes two arguments to on_event; it expects only the event name and returns a decorator to apply to a function.
Step 2: Identify common mistake
FastAPI expects the decorator syntax @app.on_event("shutdown") placed above the function definition for clarity and proper registration.
Final Answer:
The decorator syntax is incorrect; should use @app.on_event("shutdown") above the function. -> Option A
Quick Check:
Use @app.on_event("shutdown") decorator syntax [OK]
Hint: Always use @app.on_event("shutdown") decorator syntax [OK]
Common Mistakes:
Assuming function must be async (it can be sync)
Using wrong function names
Believing FastAPI lacks shutdown support
5. You want to open a database connection when your FastAPI app starts and close it when it stops. Which code correctly uses startup and shutdown events to do this?
from fastapi import FastAPI
app = FastAPI()
db = None
# Option A
@app.on_event("startup")
async def connect_db():
global db
db = "Connected"
@app.on_event("shutdown")
async def close_db():
global db
db = None
# Option B
@app.on_event("startup")
def connect_db():
db = "Connected"
@app.on_event("shutdown")
def close_db():
db = None
# Option C
@app.on_event("startup")
async def connect_db():
db = "Connected"
@app.on_event("shutdown")
async def close_db():
db = None
# Option D
@app.on_event("startup")
async def connect_db():
global db
db = None
@app.on_event("shutdown")
async def close_db():
global db
db = "Connected"
hard
A. Option A correctly manages the global db connection on startup and shutdown.
B. Option B correctly manages db without global keyword.
C. Option C correctly manages db asynchronously without global keyword.
D. Option D reverses connection and disconnection logic.
Solution
Step 1: Understand global variable usage
Since db is defined outside functions, to modify it inside functions, global db is needed.
Step 2: Check startup and shutdown logic
The correct version uses global db in both async event handlers, setting db = "Connected" on startup and db = None on shutdown. Versions without global db create local variables. One version reverses the connection and disconnection logic.
Final Answer:
Option A correctly manages the global db connection on startup and shutdown. -> Option A
Quick Check:
Use global to modify external variables in event handlers [OK]
Hint: Use global keyword to modify external variables inside event functions [OK]
Common Mistakes:
Forgetting global keyword causes local variable shadowing