1. demalexx

    28.07.2010

    0 ↑
    0 ↓

    У меня Windows 7. Встроенный джанго-сервер работает как-то очень медленно - отдаёт по два файла в секунду. Сервер настроен отдавать статику тоже. Пробовал отключать фаервол и антивирус - ничего не меняется, пробовал в разных браузерах. Подскажите, где можно чего посмотреть/подкрутить что бы сервер стал работать нормально.

    Спасибо.

  2. Подскажите, где можно чего посмотреть/подкрутить что бы сервер стал работать нормально.

    Это его нормальная работа. Он однопоточный и медленный by design. Его не надо использовать ни для чего кроме разработки.

  3. demalexx

    28.07.2010

    1 ↑
    1 ↓

    Мне кажется отдавать один файл пол секунды это не просто медленно, это неправдоподобно медленно даже для однопоточного сервера написанного на питоне :)

    Раньше была XP и тот же самый сервер отдавал мне все файлы для одной странички в пределах половины/одной секунды. А здесь пол секунды только на один файл, как по таймеру. Вот это странно.

  4. astur.net.ru

    28.07.2010

    2 ↑
    1 ↓

    Раньше была XP и тот же самый сервер отдавал мне все файлы для одной странички в пределах половины/одной секунды.

    ранее:

    У меня Windows 7. Встроенный джанго-сервер работает как-то очень медленно - отдаёт по два файла в секунду.

    Вот, собственно и ответ. Разные версии винды тормозят в непредсказуемо разных местах, так всегда было.

    Да и на самом-то деле, зачем дев-серверу летать?..

  5. demalexx

    28.07.2010

    2 ↑
    1 ↓

    Вот, собственно и ответ. Разные версии винды тормозят в непредсказуемо разных местах, так всегда было.

    Мне кажется лучше заменить "винды" на "софта" :)

    Да и на самом-то деле, зачем дев-серверу летать?..

    Летать - незачем, а нормально работать - очень даже нужно. Когда страница со всеми картинками и скриптами загружается 5 секунд вместо 0.5 - это тормозит разработку...

  6. Михаил

    28.07.2010

    1 ↑
    0 ↓
    Не должно оно так себя вести. У меня на Win7 и Ubuntu 10.4 скорость работы встроенного сервера "на глазок" одинаковая.
  7. можно картинки и скрипты чем-нибудь другим отдавать

  8. astur.net.ru

    28.07.2010

    0 ↑
    0 ↓

    Когда страница со всеми картинками и скриптами загружается 5 секунд вместо 0.5 - это тормозит разработку...

    ранее:

    Встроенный джанго-сервер работает как-то очень медленно - отдаёт по два файла в секунду.

    тут два варианта, как я вижу:

    1. Это статика. Странно, что в разной винде статика отдаётся настолько поразному. Посмотрите, вы точно в настройках выдачи статики ничего не меняли? Если нет, то надо думать в сторону отдельного быстрого сервера под статику.

    2. Дев-сервер отдаёт в среднем по два файла в секунду, но реально большую часть из пяти секунд на запрос занимает файл самой страницы. Это легко файрбагом проверить. Тогда надо профилировать, а там уже думать дальше.

  9. demalexx

    29.07.2010

    0 ↑
    0 ↓

    Отдачу статики точно не менял.

    Как это происходит в браузере - загрузился текст, потом прошло пол секунды - загрузилась картинка на кнопку, ещё пол секунды - вторая картинка, ещё пол секунды - фоновая картинка, ещё пол секунды - скрипты и т.д. Т.е. прямо видно как страница заполняется картинками невооружённым глазом.

    Как это происходит в окошке сервера - каждые пол секунды появляется новая строчка, где написано что файл такой-то отдан (файлы небольшие, <100 кб).

    Как это происходит в фаербаге - dns lookup/connecting/sending/receiving занимают какие-то милисекунды, а waiting занимает несколько секунд.

  10. demalexx

    29.07.2010

    0 ↑
    0 ↓

    Посмотрел дебагером и увидел что причина тормозов - вот такая моя простая middleware:

    class OnlineUsersMiddleware():
        def process_request(self, request):
            if request.user.is_authenticated():
                cache.set('%d-online' % (user_id, ), True, 60 * 5)
    

    %)

  11. admin

    29.07.2010

    1 ↑
    0 ↓

    создалось впечатление, что переменная user_id не определена. извиняюсь за флуд. %)

  12. astur.net.ru

    30.07.2010

    0 ↑
    0 ↓

    Получается эта MW вызывается и для статики?.. А зачем?

  13. Получается эта MW вызывается и для статики?.. А зачем?

    Отвечу вопросом на вопрос: а почему бы и нет? :)

  14. astur.net.ru

    30.07.2010

    0 ↑
    0 ↓

    Получается эта MW вызывается и для статики?.. А зачем?

    Отвечу вопросом на вопрос: а почему бы и нет? :)

    Ну, тогда уж спросим: а почему бы дев-серверу не тормозить? :)

  15. demalexx

    30.07.2010

    0 ↑
    0 ↓

    создалось впечатление, что переменная user_id не определена. извиняюсь за флуд. %)

    Так и есть... Вообще-то там вызывается функция которой передаётся request.user.pk, что бы сократить я скопипастил тело функции, но невнимательно :)

    Получается эта MW вызывается и для статики?.. А зачем?

    Потому что это происходит только в дев-сервере - статика отдаётся стандартной вьюхой, так что пусть вызывается - не жалко :)

    Ну, тогда уж спросим: а почему бы дев-серверу не тормозить? :)

    А вот это новый хороший вопрос! Чему там тормозить на пол секунды?! Проверка что пользователь вошёл? Запись True в кеш?

    Пока решил проблему отключением middleware на дев-машине. Но хотелось бы выяснить почему тормозит...

    Пытаясь выяснить попеременке закомментировал сначала первую строчку, работала только запись в кеш. Затем закомментировал вторую строчку, работала только проверка пользователя. В обоих случаях две-сервер отдавал один файл пол секунды. Проверял при включенном/выключенном memcache. Если в первой строке функции написать return то всё начинает работать шустро :)

  16. Можно попробовать сделать профайлинг

  17. demalexx

    31.07.2010

    0 ↑
    0 ↓

    Попрофилировал :) Вот что получил:

    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.

  18. Alex Slesarev

    31.07.2010

    0 ↑
    1 ↓
    Попробуйте использовать в качестве db engine sqlite, чтобы точно знать, что проблема в MySQL.

    Кстати, из своего опыта скажу, что действительно есть тормоза при работе Django c MySQL-ем, не знаю где точно проблема, в самом джанго, или в python-mysqldb, но в нашем случае это сильно проявилось. Для юнит-тестов мы интенсивно используем fixtures, и при использовании MySQL мы ловили дикие тормоза. При этом, если использовать sqlite, то тесты прогонялись раз в десять быстрее, а при использовании PostgreSQL раз в шесть быстрее. По итогу мы теперь полностью используем PostgreSQL и ни разу об этом не жалеем.
  19. Alex Slesarev, возможно, дело в том, что таблицы в myisam - а это значит, что там нет транзакций, а это значит, что невозможен быстрый откат изменений в тестах. С innodb тесты выполняются на mysql в разы быстрее.

  20. demalexx

    04.08.2010

    0 ↑
    0 ↓

    Alex Slesarev, попробовал sqlite - страницы стали открываться заметно быстрее!

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.