Django очень медленно работает на моей машине

У меня свежая установка django 1.0, и простая страница, обслуживаемая с нее, загружается за 5 секунд. На компьютере коллеги это почти не занимает времени.

Я запускаю сервер, используя

python manage.py testserver

Я вижу, что каждый запрос GET (PNG и таблицы стилей) занимает около полсекунды.

Другая странная вещь, которая, как мне кажется, связана с тем, что функциональные тесты для приложения выполняются намного медленнее на моей машине с MySQL (примерно в 100 раз медленнее, чем на машине моего коллеги). Когда я настраиваю приложение на использование sqlite, они запускаются довольно быстро. Хочу отметить, что sqlite не сильно меняет время загрузки страницы, но ускоряет запуск сервера.

Это похоже на проблему ввода-вывода, но я не вижу общих проблем с производительностью на своей машине, по крайней мере, за исключением django.

Django работает на python2.4, я использую Vista. Я также проверил python2.5.

Спасибо ΩΤΖΙΟΥ, это, должно быть, проблема DNS, потому что страница загружается быстро, как только вместо http: // локальный: 8000 / приложение иду на http://127.0.0.1:8000/app.

Но чем это могло быть вызвано? В моем хост-файле всего две записи:

127.0.0.1   localhost
::1         localhost

Вы запрашиваете страницу впервые или каждый раз? Кроме того, когда вы используете runserver, это то же самое?

S.Lott 12.12.2008 17:25

Это самая глупая ошибка, с которой я сталкивался за всю свою жизнь! Файл моих хостов пуст, потому что в Windows 7 эти две строки обрабатываются в самом DNS сервере. И такие же симптомы! Добавление строки «127.0.0.1 localhost» решает эту проблему. Спасибо чувак!

Antony Hatchkins 04.03.2017 22:21

вы можете сделать 'Недействительные призывы | Перезагрузите ваш PyCharm

Ergash Masharipov 01.06.2020 16:35
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
17
3
18 511
14
Перейти к ответу Данный вопрос помечен как решенный

Ответы 14

Отключите сканирование AV и посмотрите, имеет ли это значение. Это также могло быть вызвано Vista. Установите последний пакет обновления и попробуйте еще раз.

Я думаю, что это сервер разработки, он не оптимизирован ни по скорости, ни по безопасности. Я заметил, что специально обслуживаемые статические файлы (т.е. носители) работают медленно.

Поскольку вы сообщаете, что на компьютере вашего друга нет задержек, и я предполагаю, что ваш и его компьютеры сопоставимы, это может быть связано с DNS. Попробуйте добавить IP-адрес клиента и сервера в файл hosts на сервере.

Если вы запустите Django на * nix, это файл /etc/hosts. Если запустить его в MS Windows, это файл %WINDIR%\SYSTEM32\DRIVERS\ETC\HOSTS. (Это текстовые файлы, которые можно редактировать в вашем любимом текстовом редакторе.)

5-секундная задержка для меня всегда звучит как проблема с названием.

Ali Afshar 12.12.2008 20:55

А если ничего не помогает, вы всегда можете cProfile своему приложению и посмотреть, где именно является узким местом.

Ответ принят как подходящий

У Firefox есть проблема с переходом на localhost на некоторых компьютерах с Windows. Вы можете решить эту проблему, отключив ipv6, что на самом деле не рекомендуется. Использование 127.0.0.1 напрямую - это еще один способ решения проблемы.

Та же проблема и решение в Chrome под Windows 7.

Tarnay Kálmán 08.10.2009 05:08

Та же проблема и решение в Chrome в OS X. Я слышал слухи, что это происходит из-за того, что ОС выбирает IPv6 или IPv4 для первой попытки, и ей приходится ждать, пока первый запрос не завершится, прежде чем она попробует другую версию.

Jon 23.06.2011 00:08

У меня была такая же проблема в прошлом. Это можно решить, удалив следующую строку из файла hosts.

::1         localhost

Как только это исчезнет, ​​вы снова сможете быстро использовать localhost.

Была такая же проблема, я заметил ее с Firefox на машинах Vista и Windows 7. Доступ к серверу разработки 127.0.0.1:8000 решил проблему.

Чтобы полностью обойти localhost без изменения файла hosts или каких-либо настроек в Firefox, вы можете установить надстройку Перенаправитель и создать правило для перенаправления с localhost на 127.0.0.1. Используйте эти настройки

Include pattern : http://localhost*
Redirect to     : http://127.0.0.1$1

Остальные поля оставьте пустыми.

Ни один из этих постов мне не помог. В моем конкретном случае ответ дал мне Джастин Кармони.

Проблема

Я сопоставил [hostname] .local с 127.0.0.1 в моем файле / etc / hosts для упрощения разработки, и для разрешения DNS-запросов требовалось 5 секунд. Иногда они разрешались быстро, иногда нет.

Решение

Apple использует .local, чтобы творить чудеса волшебства с новыми сборками Snow Leopard (думаю, я начал замечать это после обновления до 10.6.8) и Mac OS X Lion. Если вы измените имя хоста разработчика так, чтобы оно начиналось с local, а не заканчивалось с local, у вас все должно быть готово. Кроме того, вы можете в значительной степени использовать любой TLD, кроме локального, и он будет работать без конфликтов.

Пример

test.local может стать:

  • local.test.com
  • test.dev
  • test. [что угодно, кроме местного]

и запись в вашем файле hosts будет выглядеть так:

local.test.com  127.0.0.1

Примечание. Это решение имеет дополнительное преимущество, поскольку оно является поддоменом [hostname] .com, что упрощает указание имени домена приложения для API Facebook и т. д.

Возможно, вы также захотите запустить dscacheutil -flushcache в терминале для хорошей меры после обновления / etc / hosts

это тоже решило эту проблему для меня, и я пользователь Windows :-) спасибо!

Esben 18.04.2013 21:50

У меня была такая же проблема, но она была вызвана mysqld.

Приложение работало довольно быстро в производственной среде с wsgi и сервером mysql на одном хосте, но медленно в среде разработки с опцией django runserver и удаленным сервером mysql.

Я заметил, что с помощью «show processlist» соединения в базе данных застряли в состоянии «логин» с пользователем «неаутентифицированный пользователь», и это заставило меня заметить, что проблема возникла в процессе аутентификации.

В поисках реальной проблемы я наконец заметил, что mysqld пытается получить DNS-имя моего IP-адреса и отключая разрешение DNS-имени, я исправил проблему.

Для этого вы можете добавить эту строку в файл my.cnf:

skip-name-resolve

У меня та же проблема.

решение было:

  • Я пытался запустить локально версию, которая обычно развертывалась на веб-сервере в процессе производства.
  • Статические файлы в производстве обслуживались конфигурацией apache, а не статической службой django.

так что я просто раскомментировал мои статические URL-адреса: /

Обновитесь до Django 1.3 или новее.

Если у вас все еще есть эта проблема в 2012 году (при использовании Chrome), убедитесь, что вы выполняете обновление. В 1.3 был исправлен ошибка, связанный с медлительностью, когда сервер разработки был однопоточным.

Обновление решило мои проблемы. Я использовал Django 1.2, так как он используется по умолчанию в Debian Squeeze.

Медленная загрузка статических файлов

Если вы заметили, что статические и мультимедийные файлы (изображения, таблицы стилей и т. д.) Загружаются особенно медленно, возможно, проблема в сервере разработки Django (python manage.py runserver). Как отмечает Хассен, этот сервер не оптимизирован по скорости.

Вы можете попробовать использовать команду django-расширенияrunserver_plus с опцией --threaded в качестве замены команды Django runserver. Под капотом он использует Werkzeug как поточный сервер WSGI. Вы можете заметить значительное улучшение времени загрузки статических файлов.

См. Также: Ускорение работы сервера разработки Django при обслуживании статических носителей

Я решил эту проблему так:

перейдите к setting.py и установите

DEBUG = False

Другие вопросы по теме