Bird
Raised Fist0
Flaskframework~10 mins

Profiling Flask applications - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to import the Flask class from the flask package.

Flask
from flask import [1]
app = [1](__name__)
Drag options to blanks, or click blank then click option'
AFlask
BRequest
Crender_template
DBlueprint
Attempts:
3 left
💡 Hint
Common Mistakes
Importing Request instead of Flask
Using render_template instead of Flask
Forgetting to import Flask
2fill in blank
medium

Complete the code to add the Flask-Profiler extension to the app.

Flask
from flask_profiler import Profiler

app = Flask(__name__)
app.config["flask_profiler"] = {"enabled": True}
profiler = [1](app)
Drag options to blanks, or click blank then click option'
AProfilerApp
BProfilerMiddleware
CProfilerExtension
DProfiler
Attempts:
3 left
💡 Hint
Common Mistakes
Using ProfilerMiddleware which is not part of flask_profiler
Using ProfilerExtension which does not exist
Not passing the app instance
3fill in blank
hard

Fix the error in the route decorator to profile the home page.

Flask
@app.route([1])
def home():
    return "Hello, Flask Profiler!"
Drag options to blanks, or click blank then click option'
Aapp
B"/"
Chome
D"/home"
Attempts:
3 left
💡 Hint
Common Mistakes
Using a function name instead of a string path
Using an incorrect path like "home" without slash
Passing the app object instead of a string
4fill in blank
hard

Fill both blanks to configure Flask-Profiler to store data in a SQLite database.

Flask
app.config["flask_profiler"] = {
    "enabled": True,
    "storage": [1],
    "storage_path": [2]
}
Drag options to blanks, or click blank then click option'
A"sqlite"
B"memory"
C"/tmp/flask_profiler.sqlite"
D"/var/log/flask_profiler"
Attempts:
3 left
💡 Hint
Common Mistakes
Using "memory" storage which does not persist data
Providing a directory path instead of a file path
Not enabling profiling
5fill in blank
hard

Fill all three blanks to create a custom middleware that logs request time in Flask.

Flask
import time
from flask import request

@app.before_request
def start_timer():
    [1] = time.time()
    setattr([2], "start_time", [1])

@app.after_request
def log_request(response):
    duration = time.time() - getattr([3], "start_time", time.time())
    print(f"Request took {duration:.4f} seconds")
    return response
Drag options to blanks, or click blank then click option'
Astart_time
Brequest
Dstart
Attempts:
3 left
💡 Hint
Common Mistakes
Not using the request object to store start time
Using inconsistent variable names
Not returning the response in after_request

Practice

(1/5)
1. What is the main purpose of profiling a Flask application?
easy
A. To find slow parts and improve performance
B. To add new routes to the app
C. To change the app's theme
D. To handle user authentication

Solution

  1. Step 1: Understand profiling concept

    Profiling is used to measure where the app spends time during execution.
  2. Step 2: Identify profiling goal in Flask

    In Flask, profiling helps find slow parts to optimize performance.
  3. Final Answer:

    To find slow parts and improve performance -> Option A
  4. Quick Check:

    Profiling = Find slow parts [OK]
Hint: Profiling = finding slow parts to speed up app [OK]
Common Mistakes:
  • Confusing profiling with adding features
  • Thinking profiling changes app design
  • Mixing profiling with security tasks
2. Which code snippet correctly adds profiling middleware to a Flask app using Werkzeug?
easy
A. app = ProfilerMiddleware(app, restrictions=[30])
B. from flask_profiler import Profiler app = Profiler(app)
C. from werkzeug.middleware.profiler import ProfilerMiddleware app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[30])
D. from werkzeug.middleware import Profiler app = Profiler(app)

Solution

  1. Step 1: Import ProfilerMiddleware correctly

    It is imported from werkzeug.middleware.profiler.
  2. Step 2: Wrap app.wsgi_app with ProfilerMiddleware

    Correct usage is app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[30]).
  3. Final Answer:

    from werkzeug.middleware.profiler import ProfilerMiddleware app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[30]) -> Option C
  4. Quick Check:

    Correct import and wrapping = from werkzeug.middleware.profiler import ProfilerMiddleware app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[30]) [OK]
Hint: ProfilerMiddleware wraps app.wsgi_app, not app directly [OK]
Common Mistakes:
  • Importing from wrong module
  • Wrapping app instead of app.wsgi_app
  • Using wrong class names
3. Given this Flask app snippet with profiling enabled, what will be the effect when you run it?
from flask import Flask
from werkzeug.middleware.profiler import ProfilerMiddleware
app = Flask(__name__)
app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[10])

@app.route('/')
def home():
    return 'Hello Profiling!'

if __name__ == '__main__':
    app.run()
medium
A. The app runs but profiling is disabled silently
B. The app runs normally and prints profiling info for each request in console
C. The app crashes due to wrong middleware usage
D. The app returns profiling data as HTTP response

Solution

  1. Step 1: Analyze middleware wrapping

    ProfilerMiddleware wraps app.wsgi_app correctly with restrictions=[10].
  2. Step 2: Understand runtime behavior

    App runs normally and profiling info prints to console for each request.
  3. Final Answer:

    The app runs normally and prints profiling info for each request in console -> Option B
  4. Quick Check:

    Correct middleware = profiling info output [OK]
Hint: ProfilerMiddleware prints profile info to console during requests [OK]
Common Mistakes:
  • Expecting profiling data in HTTP response
  • Thinking app crashes with middleware
  • Assuming profiling is off without errors
4. You added ProfilerMiddleware but see no profiling output. What is the most likely mistake in this code?
from flask import Flask
from werkzeug.middleware.profiler import ProfilerMiddleware
app = Flask(__name__)
app = ProfilerMiddleware(app, restrictions=[10])

@app.route('/')
def index():
    return 'Test'
medium
A. Flask app must be run with debug=True for profiling
B. Missing import of ProfilerMiddleware
C. Restrictions list must be empty
D. ProfilerMiddleware should wrap app.wsgi_app, not app directly

Solution

  1. Step 1: Check how ProfilerMiddleware is applied

    It incorrectly wraps app instead of app.wsgi_app.
  2. Step 2: Correct usage for profiling

    ProfilerMiddleware must wrap app.wsgi_app to work properly.
  3. Final Answer:

    ProfilerMiddleware should wrap app.wsgi_app, not app directly -> Option D
  4. Quick Check:

    Wrap app.wsgi_app, not app [OK]
Hint: Always wrap app.wsgi_app with ProfilerMiddleware [OK]
Common Mistakes:
  • Wrapping app instead of app.wsgi_app
  • Forgetting to import ProfilerMiddleware
  • Misconfiguring restrictions parameter
5. You want to profile only the slowest 5 functions in your Flask app and save the results to files in a directory named 'profile'. Which code snippet correctly achieves this?
hard
A. from werkzeug.middleware.profiler import ProfilerMiddleware app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[5], profile_dir='./profile')
B. from werkzeug.middleware.profiler import ProfilerMiddleware app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[5], profile_dir='.')
C. from werkzeug.middleware.profiler import ProfilerMiddleware app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[5], profile_dir='profile.log')
D. from werkzeug.middleware.profiler import ProfilerMiddleware app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[5], profile_dir=None)

Solution

  1. Step 1: Understand restrictions parameter

    restrictions=[5] limits output to slowest 5 functions.
  2. Step 2: Set profile_dir correctly

    profile_dir must be a directory path, not a file name, to save profile files.
  3. Step 3: Choose correct directory path

    './profile' is a directory path suitable for saving logs.
  4. Final Answer:

    from werkzeug.middleware.profiler import ProfilerMiddleware app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[5], profile_dir='./profile') -> Option A
  5. Quick Check:

    restrictions=5 + directory path = from werkzeug.middleware.profiler import ProfilerMiddleware app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[5], profile_dir='./profile') [OK]
Hint: profile_dir must be a folder, restrictions limits slowest funcs [OK]
Common Mistakes:
  • Using file name instead of directory for profile_dir
  • Setting profile_dir to None disables saving
  • Misunderstanding restrictions parameter
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard