使用 LineProfiler 对 Django App 进行逐行分析
Use LineProfiler for line-by-line profiling of Django App
我想使用 line profiler 来分析我的 django 项目以显示代码性能分析。
我正在关注这些链接:
但这不适用于 me.I 我收到有关开发服务器的错误如下:
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
django-devserve
r 目前似乎不支持 python3。
有一个 github issue and pull request 可以解决这个问题。你要么必须使用 python2 要么等到它完全支持 python3.
我想 运行 Django 应用程序上的行分析器,偶然发现了这个 Whosebug post。接受的答案似乎不适用于 Python 3,django-devserver
的最后一个 PyPI 版本是在 2014 年。
我最终使用了 pyinstrument instead, which can be added to a Django app using a single update to the middleware list。 pyinstrument
提供了基于堆栈的时序视图,而不是逐行时序视图,这实际上更适合我的用例。
在此处找到解决方案: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
我想使用 line profiler 来分析我的 django 项目以显示代码性能分析。
我正在关注这些链接:
但这不适用于 me.I 我收到有关开发服务器的错误如下:
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
django-devserve
r 目前似乎不支持 python3。
有一个 github issue and pull request 可以解决这个问题。你要么必须使用 python2 要么等到它完全支持 python3.
我想 运行 Django 应用程序上的行分析器,偶然发现了这个 Whosebug post。接受的答案似乎不适用于 Python 3,django-devserver
的最后一个 PyPI 版本是在 2014 年。
我最终使用了 pyinstrument instead, which can be added to a Django app using a single update to the middleware list。 pyinstrument
提供了基于堆栈的时序视图,而不是逐行时序视图,这实际上更适合我的用例。
在此处找到解决方案: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