跳转到主要内容

从浏览器直接进行性能分析的中间件

项目描述

https://img.shields.io/pypi/v/yet-another-django-profiler.svg https://travis-ci.org/safarijv/yet-another-django-profiler.svg?branch=master https://coveralls.io/repos/safarijv/yet-another-django-profiler/badge.svg Supported Python versions Supported Python implementations License Downloads Development Status Wheel Status

另一个Django性能分析工具试图结合多年来创建的各种Django性能分析工具的最佳功能。(有关更多背景信息,请参阅我关于该主题的 博客文章。)

安装

首先,通过pip安装获取代码

pip install yet-another-django-profiler

然后将 yet_another_django_profiler.middleware.ProfilerMiddleware 添加到您的 MIDDLEWAREMIDDLEWARE_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 (40.0 kB 查看哈希值)

上传时间 源代码

构建发行版

yet_another_django_profiler-1.1.0-py2.py3-none-any.whl (44.3 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持