2012-06-05 4 views
3

Моего питон центрального файл приложение 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).

+2

Они не импортируются по каждому запросу - только на первой для каждого экземпляра. –

+0

@NickJohnson: Что вы подразумеваете под «каждым экземпляром»? Не могли бы вы объяснить? Я знаю, что вы работаете для GAE, поэтому вы должны быть правы: D –

+1

Экземпляр - это когда ваше приложение загружается в первый раз. После того, как он будет загружен, он будет оставаться загруженным до тех пор, пока вы будете поддерживать запрос на разогрев или у вас будет достаточно запросов. Если у вас нет запроса на некоторое время, Google отменит ваш экземпляр. В следующий раз, когда ваше приложение получит запрос, оно запустит новый экземпляр, и все ваши обработчики будут перезагружены, если вы не будете использовать lazy обработчиков webapp2. (Несмотря на то, что есть некоторые ошибки, о которых вам нужно следить, поэтому обязательно прочитайте документацию ленивого обработчика, которую вы связали в своем ответе ниже.) –

ответ

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