Application Profiler¶
This module provides a middleware that profiles each request with the
cProfile
module. This can help identify bottlenecks in your code
that may be slowing down your application.
- class werkzeug.middleware.profiler.ProfilerMiddleware(app, stream=sys.stdout, sort_by=('time', 'calls'), restrictions=(), profile_dir=None, filename_format='{method}.{path}.{elapsed:.0f}ms.{time:.0f}.prof')¶
Wrap a WSGI application and profile the execution of each request. Responses are buffered so that timings are more exact.
If
stream
is given,pstats.Stats
are written to it after each request. Ifprofile_dir
is given,cProfile
data files are saved to that directory, one file per request.The filename can be customized by passing
filename_format
. If it is a string, it will be formatted usingstr.format()
with the following fields available:{method}
- The request method; GET, POST, etc.{path}
- The request path or ‘root’ should one not exist.{elapsed}
- The elapsed time of the request in milliseconds.{time}
- The time of the request.
If it is a callable, it will be called with the WSGI
environ
and be expected to return a filename string. Theenviron
dictionary will also have the"werkzeug.profiler"
key populated with a dictionary containing the following fields (more may be added in the future): -{elapsed}
- The elapsed time of the request in milliseconds. -{time}
- The time of the request.- Parameters:
app (WSGIApplication) – The WSGI application to wrap.
stream (t.IO[str] | None) – Write stats to this stream. Disable with
None
.sort_by (t.Iterable[str]) – A tuple of columns to sort stats by. See
pstats.Stats.sort_stats()
.restrictions (t.Iterable[str | int | float]) – A tuple of restrictions to filter stats by. See
pstats.Stats.print_stats()
.profile_dir (str | None) – Save profile data files to this directory.
filename_format (str) – Format string for profile data file names, or a callable returning a name. See explanation above.
from werkzeug.middleware.profiler import ProfilerMiddleware app = ProfilerMiddleware(app)
Changelog
Changed in version 3.0: Added the
"werkzeug.profiler"
key to thefilename_format(environ)
parameter with theelapsed
andtime
fields.Changed in version 0.15: Stats are written even if
profile_dir
is given, and can be disable by passingstream=None
.Added in version 0.15: Added
filename_format
.Added in version 0.9: Added
restrictions
andprofile_dir
.