Performance: Context lifecycle execution
This affects how Flask manages request and application contexts during a web request, impacting response time and resource cleanup.
from flask import request from flask import Flask app = Flask(__name__) @app.route('/') def view(): # Use Flask's automatic context management # Context is pushed and popped automatically per request process_request() return 'Done'
from flask import request from flask import Flask app = Flask(__name__) def view(): # Manually push context multiple times ctx = app.test_request_context() ctx.push() # Do some processing ctx.pop() ctx.push() # More processing ctx.pop() return 'Done'
| Pattern | Context Operations | Request Latency | Server CPU Cost | Verdict |
|---|---|---|---|---|
| Manual multiple context push/pop | Multiple redundant operations | Increased by 20-50ms | Higher CPU due to overhead | [X] Bad |
| Automatic Flask context lifecycle | Single push/pop per request | Minimal latency added | Low CPU overhead | [OK] Good |
before_request function in the context lifecycle?before_requestafter_request cleans up after requests, error handlers manage errors, and routes define URLs.before_request runs before request [OK]g object to store data unique to each request.g inside before_request ensures data is set up before route handlers run.g object inside a before_request function -> Option Ag stores request data [OK]g for request data, not globals [OK]/hello?
from flask import Flask, g
app = Flask(__name__)
@app.before_request
def before():
g.message = 'Hi'
@app.route('/hello')
def hello():
return g.message + ' there!'before_request functiong.message to 'Hi' before the route runs.g.message + ' there!', which becomes 'Hi there!'.g.message set before route [OK]g data used in routes [OK]g.message is not set yetbefore_request runs before routesg attributeg outside a request context?
from flask import Flask, g
app = Flask(__name__)
g.message = 'Hello'
@app.route('/')
def index():
return g.messageg is assignedg.message = 'Hello' is set outside any request or app context.g is only available during a request context; accessing it outside causes an error.g outside a request causes a runtime error -> Option Dg only valid inside requests [OK]g only inside request functions [OK]g variables globally outside requestsg with global variablesbefore_request to mark start timeg.start_time before the request runs.after_request to calculate duration and logg.start_time and log it, then return the response.before_request to store start time in g, and after_request to calculate and log duration -> Option BgPass the test and this pattern moves unknown