2016-09-26 3 views
0

Я пытаюсь обнаружить причину задержек при запуске Django 1.8, особенно, но не только при запуске в отладчике (WingIDE 5 и 6 в моем случае).Устранение неполадок при запуске Django 1.8

Минимальный тестовый пример: пример «опроса» в Django 1.8, выполненный только до первой точки, где работает «manage.py runningerver». Все настройки по умолчанию, используя SQLite. Python 3.5.2 с Django 1.8.14, в новом помещении.

Из командной строки на Linux (Mint 18) и Windows (7-64) это может занять до 2 секунд, чтобы добраться до сообщения «Запустить сервер разработки». Но в Windows это иногда занимает 10+ секунд. И в отладчике на обеих машинах это может занять 40 секунд.

Одна конкретная проблема: поместив операторы печати в начало и конец django/__init__.py setup(), я отмечаю, что эта функция вызывается дважды перед сообщением «Starting ...» и снова после этого сообщения; первые два раза вносят половину задержки каждый. Это говорит о том, что django запускается три раза. В чем цель этого, или это указывает на проблему?

(Я обнаружил, что я мог бы избавиться от одного из первых двух запусков() с помощью параметра runerver --noreload. Но почему это происходит в первую очередь? И все же есть вызов startup() после сообщение «Starting ...».)

Подводя итог вопросу: - Какие-либо сведения о том, что может быть причиной задержки? - Почему django нужно запускать три раза? (Или дважды, даже с --noreload).

+1

Если у вас такая же проблема, оставьте свой python3.5.2 до python3.4.4 и он будет работать нормально. И затем перестройте свой env. – sebb

+0

@sebb Приятно не чувствовать себя одиноким :-). Вы знаете, что изменилось с 3.4.4 до 3.5.2, чтобы вызвать это? Я верю, что внесение этих изменений заставило проблему уйти за вас. Но слишком легко для такого изменения исправить что-то периферийное для версии Python как таковое. – gwideman

+0

Насколько я знаю, существует проблема с python3.5, django и mint. К несчастью, я не знаю, в чем проблема. У коллеги также была та же проблема, он сказал, чтобы он отказался от питона и всего рабочего. – sebb

ответ

0

Частичный ответ.

Спустя некоторое время с отладчиком WingIDE IDE и некоторым профилированием с помощью cProfile, я обнаружил проблему главного процессора.

Во время начального запуска django существует каскад импорта, в котором модуль validators.py готовит некоторые скомпилированные регулярные выражения для последующего использования. Один, в частности, URLValidator.regex, является сложным и включает также пять экземпляров набора символов Юникода (переменная ul). Это заставляет re.compile выполнять большую обработку, особенно в sre_compile.py _optimize_charset() и при большом количестве вызовов функции fixup().

Как бы то ни было, конкретная комбинация вызовов и структуры данных, по-видимому, достигла особой медлительности в отладчике WingIDE 6.0b2. Это значительно быстрее в отладчике WingIDE 5.1 ​​(хотя все еще намного медленнее, чем при запуске из командной строки). Не уверен, почему пока, но Wingware изучает его.

Это не объясняет случайную медлительность при запуске из командной строки в Windows; есть внешнее изменение, это ожидало, что спальный диск пробудится. Все еще наблюдает.

Смежные вопросы