Моего питон центрального файл приложение GAE приложения в выглядит следующим образом:GAE Webapp: стоимость импорта кучи запросов обработчиков
import webapp2
import homepage
import user_auth
import user_confirm
import admin_user
import admin_config
import config
app = webapp2.WSGIApplication([
(user_auth.get_login_url(), user_auth.LoginHandler),
(user_auth.get_logout_url(), user_auth.LogoutHandler),
("/user/confirm", user_confirm.UserConfirmHandler),
("/admin/config", admin_config.AdminConfigHandler),
("/admin/user/add", admin_user.AdminAddUserHandler),
("/admin/user", admin_user.AdminUserHandler),
("/", homepage.HomepageHandler),
], debug=True)
Как вы можете видеть, я должен импортировать кучу запросов обработчиков, но для каждого запрос, используется только один из них, другой импорт просто бесполезен!
Это большая потеря памяти и производительности, потому что эти ненужные импорты также импортируют другие вещи сами по себе. Есть ли в Google App Engine какой-то механизм «кэширования» или что-то, что делает эти ненужные импорт незначительными? Думаю, нет.
Как я могу их избежать? Я просто не нашел способ импортировать 1 Обработчик запросов в запрос. Если я поместил всю маршрутизацию в app.yaml, это будет работать так, как я хочу, но это делает вещи сложными, потому что я должен написать app = webapp2.WSGIApplication(...
для каждого файла обработчика запроса и повторить эти скучные URL-адреса дважды (как в файле python, так и в приложении. YAML).
Они не импортируются по каждому запросу - только на первой для каждого экземпляра. –
@NickJohnson: Что вы подразумеваете под «каждым экземпляром»? Не могли бы вы объяснить? Я знаю, что вы работаете для GAE, поэтому вы должны быть правы: D –
Экземпляр - это когда ваше приложение загружается в первый раз. После того, как он будет загружен, он будет оставаться загруженным до тех пор, пока вы будете поддерживать запрос на разогрев или у вас будет достаточно запросов. Если у вас нет запроса на некоторое время, Google отменит ваш экземпляр. В следующий раз, когда ваше приложение получит запрос, оно запустит новый экземпляр, и все ваши обработчики будут перезагружены, если вы не будете использовать lazy обработчиков webapp2. (Несмотря на то, что есть некоторые ошибки, о которых вам нужно следить, поэтому обязательно прочитайте документацию ленивого обработчика, которую вы связали в своем ответе ниже.) –