-
У меня Windows 7. Встроенный джанго-сервер работает как-то очень медленно - отдаёт по два файла в секунду. Сервер настроен отдавать статику тоже. Пробовал отключать фаервол и антивирус - ничего не меняется, пробовал в разных браузерах. Подскажите, где можно чего посмотреть/подкрутить что бы сервер стал работать нормально.
Спасибо.
-
Подскажите, где можно чего посмотреть/подкрутить что бы сервер стал работать нормально.
Это его нормальная работа. Он однопоточный и медленный by design. Его не надо использовать ни для чего кроме разработки.
-
Мне кажется отдавать один файл пол секунды это не просто медленно, это неправдоподобно медленно даже для однопоточного сервера написанного на питоне :)
Раньше была XP и тот же самый сервер отдавал мне все файлы для одной странички в пределах половины/одной секунды. А здесь пол секунды только на один файл, как по таймеру. Вот это странно.
-
Раньше была XP и тот же самый сервер отдавал мне все файлы для одной странички в пределах половины/одной секунды.
ранее:
У меня Windows 7. Встроенный джанго-сервер работает как-то очень медленно - отдаёт по два файла в секунду.
Вот, собственно и ответ. Разные версии винды тормозят в непредсказуемо разных местах, так всегда было.
Да и на самом-то деле, зачем дев-серверу летать?..
-
Вот, собственно и ответ. Разные версии винды тормозят в непредсказуемо разных местах, так всегда было.
Мне кажется лучше заменить "винды" на "софта" :)
Да и на самом-то деле, зачем дев-серверу летать?..
Летать - незачем, а нормально работать - очень даже нужно. Когда страница со всеми картинками и скриптами загружается 5 секунд вместо 0.5 - это тормозит разработку...
-
Не должно оно так себя вести. У меня на Win7 и Ubuntu 10.4 скорость работы встроенного сервера "на глазок" одинаковая.
-
можно картинки и скрипты чем-нибудь другим отдавать
-
Когда страница со всеми картинками и скриптами загружается 5 секунд вместо 0.5 - это тормозит разработку...
ранее:
Встроенный джанго-сервер работает как-то очень медленно - отдаёт по два файла в секунду.
тут два варианта, как я вижу:
Это статика. Странно, что в разной винде статика отдаётся настолько поразному. Посмотрите, вы точно в настройках выдачи статики ничего не меняли? Если нет, то надо думать в сторону отдельного быстрого сервера под статику.
Дев-сервер отдаёт в среднем по два файла в секунду, но реально большую часть из пяти секунд на запрос занимает файл самой страницы. Это легко файрбагом проверить. Тогда надо профилировать, а там уже думать дальше.
-
Отдачу статики точно не менял.
Как это происходит в браузере - загрузился текст, потом прошло пол секунды - загрузилась картинка на кнопку, ещё пол секунды - вторая картинка, ещё пол секунды - фоновая картинка, ещё пол секунды - скрипты и т.д. Т.е. прямо видно как страница заполняется картинками невооружённым глазом.
Как это происходит в окошке сервера - каждые пол секунды появляется новая строчка, где написано что файл такой-то отдан (файлы небольшие, <100 кб).
Как это происходит в фаербаге - dns lookup/connecting/sending/receiving занимают какие-то милисекунды, а waiting занимает несколько секунд.
-
Посмотрел дебагером и увидел что причина тормозов - вот такая моя простая middleware:
class OnlineUsersMiddleware(): def process_request(self, request): if request.user.is_authenticated(): cache.set('%d-online' % (user_id, ), True, 60 * 5)%)
-
создалось впечатление, что переменная
user_idне определена. извиняюсь за флуд. %) -
Получается эта MW вызывается и для статики?.. А зачем?
-
Получается эта MW вызывается и для статики?.. А зачем?
Отвечу вопросом на вопрос: а почему бы и нет? :)
-
Получается эта MW вызывается и для статики?.. А зачем?
Отвечу вопросом на вопрос: а почему бы и нет? :)
Ну, тогда уж спросим: а почему бы дев-серверу не тормозить? :)
-
создалось впечатление, что переменная user_id не определена. извиняюсь за флуд. %)
Так и есть... Вообще-то там вызывается функция которой передаётся
request.user.pk, что бы сократить я скопипастил тело функции, но невнимательно :)Получается эта MW вызывается и для статики?.. А зачем?
Потому что это происходит только в дев-сервере - статика отдаётся стандартной вьюхой, так что пусть вызывается - не жалко :)
Ну, тогда уж спросим: а почему бы дев-серверу не тормозить? :)
А вот это новый хороший вопрос! Чему там тормозить на пол секунды?! Проверка что пользователь вошёл? Запись
Trueв кеш?Пока решил проблему отключением middleware на дев-машине. Но хотелось бы выяснить почему тормозит...
Пытаясь выяснить попеременке закомментировал сначала первую строчку, работала только запись в кеш. Затем закомментировал вторую строчку, работала только проверка пользователя. В обоих случаях две-сервер отдавал один файл пол секунды. Проверял при включенном/выключенном memcache. Если в первой строке функции написать
returnто всё начинает работать шустро :) -
Можно попробовать сделать профайлинг
-
Попрофилировал :) Вот что получил:
ncalls tottime cumtime 25 12.646 12.679 d:\Programs\Python27\lib\site-packages\MySQLdb\__init__.py:78(Connect)Это время, затраченное на загрузку всех нужных файлов одной странички. На запрос получается ~0.6 секунд.
tottime говорит нам что этот код выполнялся 12 секунд без учёта вызываемых функций. Вот этот код:
def Connect(*args, **kwargs): """Factory function for connections.Connection.""" from connections import Connection return Connection(*args, **kwargs)Посмотрел сколько занимает выполнение
Connection()- десятые и сотые доли мс. Это что ли выходит что тормозит код функцииConnect, но там ведь всего две строчки...А мой код, вызывающий в конечном итоге Connect, который тормозит, - получение пользователя из реквеста:
request.user.В общем... я решил что проблема либо в
mysql-python, либо в том, как эта библиотека работает с MySQL в Windows 7. -
Попробуйте использовать в качестве db engine sqlite, чтобы точно знать, что проблема в MySQL.
Кстати, из своего опыта скажу, что действительно есть тормоза при работе Django c MySQL-ем, не знаю где точно проблема, в самом джанго, или в python-mysqldb, но в нашем случае это сильно проявилось. Для юнит-тестов мы интенсивно используем fixtures, и при использовании MySQL мы ловили дикие тормоза. При этом, если использовать sqlite, то тесты прогонялись раз в десять быстрее, а при использовании PostgreSQL раз в шесть быстрее. По итогу мы теперь полностью используем PostgreSQL и ни разу об этом не жалеем. -
Alex Slesarev, возможно, дело в том, что таблицы в myisam - а это значит, что там нет транзакций, а это значит, что невозможен быстрый откат изменений в тестах. С innodb тесты выполняются на mysql в разы быстрее.
-
Alex Slesarev, попробовал sqlite - страницы стали открываться заметно быстрее!
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.





