Проблемы с производительностью с Django - PullRequest
2 голосов
/ 20 февраля 2012

Я пытаюсь отследить некоторые проблемы с производительностью, которые у меня были с Django. Кажется, что с момента нажатия кнопки «Обновить» до момента получения ответа браузером происходит задержка в 600–800 мс.

Я настроил простое представление и промежуточное ПО профиля, и это представление и результаты:

функция просмотра:

def test(request):
    return HttpResponse("It works")

Результаты профиля (я использовал http://www.djangosnippets.org/snippets/186/):

9 function calls in 0.000 CPU seconds

Ordered by: internal time, call count

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    1    0.000    0.000    0.000    0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http/__init__.py:487(__init__)
    1    0.000    0.000    0.000    0.000 /home/mysite/mysite/mysite/map/views.py:19(test)
    1    0.000    0.000    0.000    0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http/__init__.py:532(__setitem__)
    3    0.000    0.000    0.000    0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http/__init__.py:517(_convert_to_ascii)
    2    0.000    0.000    0.000    0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/utils/functional.py:274(__getattr__)
    1    0.000    0.000    0.000    0.000 /usr/lib/python2.6/Cookie.py:573(__init__)
    0    0.000             0.000          profile:0(profiler)


---- By file ----

 tottime
0.0%   0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/utils/functional.py
0.0%   0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http/__init__.py
0.0%   0.000 /usr/lib/python2.6/Cookie.py
0.0%   0.000 /home/mysite/mysite/mysite/map/views.py

---- By group ---

  tottime
0.0%   0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/utils
0.0%   0.000 /usr/local/lib/python2.6/dist-packages/Django-1.3.1-py2.6.egg/django/http
0.0%   0.000 /usr/lib/python2.6
0.0%   0.000 /home/mysite/mysite/mysite/map

Итак, профилировщик не возвращает никаких чисел, однако Chrome сообщает о задержке в 647 мс от запроса ресурса до фактического получения какого-либо ответа. Мое время проверки связи с сервером составляет около 50 мс. Любые идеи, как мне улучшить профилирование, чтобы я мог видеть, где в Django это замедление вызвано?

Мой конфиг WSGI. Я использую Чероки с Уссги.

import os
import sys

path = '/home/mysite/mysite/mysite/'
if path not in sys.path:
    sys.path.append(path)



os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Я вижу эту задержку (в течение 20 мс) на разных компьютерах, а также в разных сетях. Я также вижу это, когда просто использую manage.py runserver.

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Django может замедляться по нескольким причинам.Одна из основных причин может быть неуместной или не использовать Memcached .Просмотрите документы, чтобы получить представление о плюсах и минусах наличия кэша.Вы также можете найти эту статью полезной.

1 голос
/ 20 февраля 2012

Похоже, что ваш интерпретатор Python перезагружается при каждом запросе.Мое предположение: задержка происходит до профилирования.Если вы используете mod_wsgi, какова ваша настройка максимального количества запросов?Как выглядит ваша конфигурация wsgi?

Или вы используете много JavaScript, и задержка в вашем браузере.

...