【问题标题】:Use LineProfiler for line-by-line profiling of Django App使用 LineProfiler 对 Django App 进行逐行分析
【发布时间】:2016-07-15 12:39:18
【问题描述】:

我想使用 line profiler 来分析我的 django 项目以显示代码性能分析。

我正在关注这些链接:

  1. http://djangotricks.blogspot.in/2015/01/performance-bottlenecks-in-django-views.html

  2. https://github.com/dcramer/django-devserver

但这对我不起作用。我收到关于开发服务器的错误,如下所示:

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/.virtualenvs/test/lib/python3.4/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line
    utility.execute()
  File "/.virtualenvs/test/lib/python3.4/site-packages/django/core/management/__init__.py", line 342, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/.virtualenvs/test/lib/python3.4/site-packages/django/core/management/__init__.py", line 195, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/.virtualenvs/test/lib/python3.4/site-packages/django/core/management/__init__.py", line 39, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/.virtualenvs/test/lib64/python3.4/importlib/__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1129, in _exec
  File "<frozen importlib._bootstrap>", line 1467, in exec_module
  File "<frozen importlib._bootstrap>", line 1572, in get_code
  File "<frozen importlib._bootstrap>", line 1532, in source_to_code
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "/.virtualenvs/test/lib/python3.4/site-packages/devserver/management/commands/runserver.py", line 29
    raise exc_type, exc_value, tb
                  ^
SyntaxError: invalid syntax

注意:我使用的版本 - Django:1.9 和 python:3.4

【问题讨论】:

    标签: python django line-profiler


    【解决方案1】:

    在此处找到解决方案:https://lothiraldan.github.io/2018-02-18-python-line-profiler-without-magic/

    在 Python 3.8 和 Django 3.2 上测试。

    就在 django 代码中的函数之前,粘贴以下内容:

    import line_profiler
    import atexit
    profile = line_profiler.LineProfiler()
    atexit.register(profile.print_stats)
    
    @profile
    def my_function_in_django_code():
        ....
    

    然后,启动普通服务器./manage.py runserver

    退出服务器时(Ctrl+C),退出时会显示Line_profiler的结果。

    其他解决方案:只需输出到文件:

    import line_profiler
    profile = line_profiler.LineProfiler()
    
    
    @profile
    def my_function_in_django_code():
        ....
    
        with open('output.txt', 'w') as stream:
            profile.print_stats(stream=stream)        
    
        return something
    

    【讨论】:

      【解决方案2】:

      django-devserver 目前似乎不支持 python3。

      有一个 github issuepull request 来解决这个问题。你要么必须使用python2,要么等到它完全支持python3。

      【讨论】:

        【解决方案3】:

        我想在 Django 应用程序上运行 line-profiler 并偶然发现了这篇 StackOverflow 帖子。接受的答案似乎不适用于 Python 3,而 django-devserver 的最后一个 PyPI 版本是在 2014 年。

        我最终改用pyinstrument,即can be added to a Django app using a single update to the middleware listpyinstrument 不是逐行计时视图,而是提供基于堆栈的计时视图,这实际上更适合我的用例。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-04-02
          • 1970-01-01
          • 1970-01-01
          • 2015-07-28
          • 2012-05-22
          • 1970-01-01
          • 2021-07-21
          相关资源
          最近更新 更多