Django очень медленный на моей машине

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

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

python manage.py testserver

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

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

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

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

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

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

127.0.0.1   localhost
::1         localhost

Ответы

Ответ 1

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

Ответ 2

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

Проблема

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

Решение

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

Пример

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

  • local.test.com
  • test.dev
  • test. [ничего, кроме локального]

и запись вашего хоста будет выглядеть следующим образом:

local.test.com  127.0.0.1

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

::1         localhost

Как только вы уйдете, вы сможете быстро использовать localhost.

Ответ 6

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

Ответ 7

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

Ответ 8

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

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

Я заметил использование "show processlist", что соединения в базе данных, которые застряли в состоянии "login" с пользователем "не прошедшим проверку пользователя", и это заставляет меня заметить, что проблема, когда в процессе аутентификации.

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

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

скип-имя-Решимость

Ответ 9

Перейдите на Django 1.3 или новее.

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

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

Ответ 10

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

Ответ 11

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

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

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

Ответ 12

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

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

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

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

Ответ 13

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

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