从浏览器直接进行性能分析的中间件
项目描述
另一个Django性能分析工具试图结合多年来创建的各种Django性能分析工具的最佳功能。(有关更多背景信息,请参阅我关于该主题的 博客文章。)
安装
首先,通过pip安装获取代码
pip install yet-another-django-profiler
然后将 yet_another_django_profiler.middleware.ProfilerMiddleware 添加到您的 MIDDLEWARE 或 MIDDLEWARE_CLASSES Django设置(通常在列表末尾,如果您想在使用的其他中间件上包含性能数据)。如果您想使用中间件生成调用图,您还需要安装 Graphviz。如果您想使用“profile”管理命令,您还需要将 yet_another_django_profiler 添加到 INSTALLED_APPS 设置。
中间件使用
最简单的用法是在Django视图的URL中添加一个profile参数。这使用Graphviz生成执行视图时调用的代码调用图的PDF表示,并将该表示作为响应返回,而不是渲染视图本身。因此,调用类似https://:8000/admin/?profile的URL,将在浏览器中显示一个类似于这个的PDF文件。
或者,您可以使用类似https://:8000/?profile=time的URL显示按所需统计信息排序的调用函数表。可用的排序选项有
calls(调用次数)
cumulative(累计时间)
file(文件名,与module相同)
module(文件名,与file相同)
pcalls(原始调用次数)
line(行号)
name(函数名)
nfl(函数名/文件/行)
stdname(标准名)
time(内部时间)
默认情况下,只有调用次数最多的前20%的函数包含在表中。要更改此设置,请添加一个带有所需显示比例的fraction参数(因此默认值为fraction=.2)。或者,您可以使用max_calls参数指定要显示的最大函数调用次数。如果指定了带有pattern参数的正则表达式,则仅显示与指定模式匹配的函数调用。如果您不喜欢处理URL转义的特殊字符,我建议您坚持使用基本子字符串。默认情况下,使用yappi时,如果需要的是wall时间,则可以使用clock=wall。
返回StreamingHttpResponse的视图可以进行性能分析,但性能分析数据在视图响应返回时停止;对内容进行迭代的性能分析不会进行。
如果您忘记了可用的排序选项等,可以使用profile=help作为请求参数在浏览器中显示使用说明。
管理命令使用方法
yet-another-django-profiler 包含一个 profile 管理命令,可以用于对其他Django管理命令进行性能分析
usage: manage.py profile [-h] [--version] [-v {0,1,2,3}] [--settings SETTINGS] [--pythonpath PYTHONPATH] [--traceback] [--no-color] [-o PATH] [-s SORT] [-f FRACTION] [-m MAX_CALLS] [-p PATTERN] [-b BACKEND] [-c CLOCK] other_command ... Profile another Django management command positional arguments: other_command The management command to be profiled command_arguments Arguments of the management command being profiled optional arguments: -h, --help show this help message and exit --version show program's version number and exit -v {0,1,2,3}, --verbosity {0,1,2,3} Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, 3=very verbose output --settings SETTINGS The Python path to a settings module, e.g. "myproject.settings.main". If this isn't provided, the DJANGO_SETTINGS_MODULE environment variable will be used. --pythonpath PYTHONPATH A directory to add to the Python path, e.g. "/home/djangoprojects/myproject". --traceback Raise on CommandError exceptions --no-color Don't colorize the command output. -o PATH, --output PATH Path to a file in which to store the profiling output (required if generating a call graph PDF, other results are output to the console by default) -s SORT, --sort SORT Statistic by which to sort the profiling data (default is to generate a call graph PDF instead) -f FRACTION, --fraction FRACTION The fraction of total function calls to display (the default of .2 is omitted if max-calls or pattern are specified) -m MAX_CALLS, --max-calls MAX_CALLS The maximum number of function calls to display -p PATTERN, --pattern PATTERN Regular expression filter for function display names -b BACKEND, --backend BACKEND Profiler backend to use (cProfile or yappi) -c CLOCK, --clock CLOCK Yappi clock type to use (cpu or wall)
示例用法
django-admin.py profile -s time test --failfast my_app/my_module.py:TestClass.test_function
django-admin.py profile -o ~/Downloads/call_graph.pdf collectstatic
设置
中间件设计为当DEBUG设置为True时始终可用,否则从中间件链中移除自己(因此可以安全地将其留在生产部署的依赖项中,而不会引起性能或安全问题)。如果您出于某种原因想更改此行为,可以将YADP_ENABLED布尔设置直接设置为确定中间件是否处于活动状态。
如果您有一些页面,其中默认的性能分析参数名称与应用程序中现有的参数冲突,您可以通过以下设置选择不同的名称
YADP_PROFILE_PARAMETER(默认为“profile”)
YADP_FRACTION_PARAMETER(默认为“fraction”)
YADP_MAX_CALLS_PARAMETER(默认为“max_calls”)
YADP_PATTERN_PARAMETER(默认为“pattern”)
YADP_CLOCK_PARAMETER(默认为“cpu”)
您可以将 Yappi(另一个 Python 分析器)用作分析器后端,而不是 cProfile。要做到这一点,只需在设置中指定 YADP_PROFILER_BACKEND = 'yappi' 即可。请注意,Yappi 目前不支持 PyPy 或 CPython 3.2。
努力将分析器提供的绝对 Python 文件路径转换为全限定模块名(通常更短且更容易直观理解)。默认规则在大多数情况下应该适用,但可以通过以下设置进行自定义
YADP_MODULE_PARENT_DIR_PATTERNS 是一个正则表达式模式列表。模块路径中的所有内容,包括与这些模式之一匹配的内容,都将从统计表和调用图中删除。默认列表为 [r'\.egg[/\\]', r'site-packages[/\\]', r'python\d+\.\d+[/\\]']。当前工作目录的绝对路径也被修剪。
如果之前的设置不能满足您的需求,可以使用 YADP_PATH_TO_MODULE_FUNCTION 设置来完全替换用于此任务的功能。它应该是您的自定义函数的完全限定名称,该函数接受绝对文件路径作为输入,并返回您希望在分析输出中出现的表示该路径的内容。
为了获取简单而有意义的分析数据,您可能还需要对设置进行一些更改。
运行测试
要运行所有当前支持的 Python 和 Django 组合的测试,请运行 tox。如果您从 Python 2 环境中运行 tox,则可以运行 detox 以并行执行所有测试环境。有关运行单个测试用例或环境的说明,请参阅 tox 文档。
国际化
在分析结果页面中可能出现的文本的翻译由 Transifex 管理。您可以自由请求添加为尚未支持的语言的翻译者。由于各种技术原因,Django 建议不要翻译管理命令文本,因此这些短语目前不包括在内。
对于涉及翻译的开发任务(将消息更改上传到 Transifex 或从其中获取最新翻译),请使用 transifex-client。默认情况下,pip 安装了一个相当旧的稳定版本,因此您可能需要指定一个较新的版本
pip install transifex-client==0.11b3
在运行 makemessages 或 compilemessages 管理命令时,请从 yet_another_django_profiler 目录运行。
许可证
由于 gprof2dot 根据 LGPL v3 许可,因此这是整个包适用的许可。但是,其余源文件分别根据更宽容的 3-clause BSD 许可进行许可(因此可以组装一个仅省略调用图生成功能的 BSD 许可包)。
项目详情
yet-another-django-profiler-1.1.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1bc090db28960c9bcdf8b6c3501b015f89a2998f5de9d7534463fc87f52fb76f |
|
MD5 | 4c5235623f728bf4d481603a9a048bfe |
|
BLAKE2b-256 | 7f3bb84d9d9237aedf9dffc73981001746d8333a2b9b4a4175971b85dda3dff7 |
yet_another_django_profiler-1.1.0-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d101107d2a00ccb5422e4e40c0521b91a834372bf1145a7bc00cfe667acfc880 |
|
MD5 | 3aae6df802f3dc3e1504e42e6b1755cc |
|
BLAKE2b-256 | 1e7e88d2114394e381d687782dacc384d9f92b31f44efc40786522401a262a96 |