Сервер разработки Google App Engine медленно запускается при использовании WingIDE - PullRequest
1 голос
/ 16 октября 2010

Я занимаюсь разработкой на Google App Engine. Я использую WingIDE (Python IDE) для отладки на сервере разработки. У меня есть несколько тысяч объектов в моем хранилище данных, и я вижу, что при запуске сервера разработки он должен пройти через DatastoreFileStub.Read () и сделать что-то для каждого объекта.

Проблема в том, что когда я запускаю сервер разработки через WingIDE, он работает ужасно медленно. Я добавил код регистрации профилирования в движок приложений Google, чтобы достичь максимума.

Когда я запускаю сервер разработки в командной строке, я получаю следующее сообщение:

Finished reading 10374 Entites in 10.17 seconds, 1019 per second

Однако, когда я запускаю сервер разработки через WingIDE, я получаю следующее:

Finished reading 10374 Entites in 52.44 seconds, 197 per second

У кого-нибудь есть идея, почему WingIDE будет в 5 раз медленнее?

Ответы [ 2 ]

2 голосов
/ 18 октября 2010

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

Использование флага --use_sqlite включит экспериментальное локальное хранилище данных на основе sqlite, что потребует меньшего времени запуска. Учтите, однако, что при переключении на него вам потребуется стереть хранилище данных.

0 голосов
/ 11 февраля 2014

Одна из идей - использовать wingdbstub для запуска отладки после завершения запуска. Вам нужно добавить куда-нибудь «import wingdbstub», но это может произойти в любом месте после запуска. Конечно, модуль должен быть на пути к Python, IDE должен быть настроен на прослушивание соединений, и вам нужно настроить базовую защиту - все это подробно описано в http://wingware.com/doc/debug/importing-the-debugger

Существует также API-интерфейс, позволяющий начать отладку раньше и временно отключить его в местах, где накладные расходы отладчика слишком велики. Смотри http://wingware.com/doc/debug/debugger-api

Затраты на отладчик - сложная вещь (по крайней мере, для CPython), поскольку они пропорциональны количеству выполненных байтовых кодов Python. Из кода Python не всегда очевидно, сколько времени занимает интерпретатор, выполняющий байт-коды, и сколько времени находится в библиотеках C / C ++ или внутренних компонентах Python. Что-то вроде вложенных циклов Python, которые перебирают большие объемы данных, в отладчике будет намного медленнее, если работа, которую они выполняют, в основном выполняется в Python. Во многих случаях большая часть работы фактически выполняется во внутреннем коде Python или коде библиотеки, поэтому отладчик не будет так сильно тормозить.

...