2011-05-05 7 views
5

el uso de Google App Engine:¿Google App Engine ejecuta una instancia de una aplicación por cada solicitud? o para todas las solicitudes?

# more code ahead not shown 
application = webapp.WSGIApplication([('/', Home)], 
           debug=True) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 

Si dos usuarios diferentes solicitan a la página web en dos máquinas diferentes, se invocará dos instancias individuales del servidor?

¿O solo una instancia del servidor se está ejecutando todo el tiempo que maneja todas las solicitudes?

¿Qué tal si un usuario abre la página web dos veces en el mismo navegador?

Edición:

De acuerdo con las respuestas a continuación, un caso puede manejar las peticiones de los diferentes usuarios giro a giro. A continuación, considere la siguiente fracción de código, tomado del ejemplo Google dio:

class User(db.Model): 
    email = db.EmailProperty() 
    nickname = db.StringProperty() 

1, de correo electrónico y apodo aquí se definen como variables de clase? 2, ¿Todas las solicitudes manejadas por la misma instancia de servidor comparten las mismas variables y por lo tanto, por error, interfieren entre sí? (Por ejemplo, el correo electrónico de uno aparece en la página de otra persona)

ps. Sé que debo leer el manual y doc más y lo estoy haciendo, sin embargo, las respuestas del programador experimentado realmente me ayudarán a entenderlo más rápido.

+1

RE: correo electrónico/apodo como variables de clase. Son 'propiedades', no trabajas en la clase que trabajas con instancias de la clase. es decir, no hace 'User.email =" [email protected] "' lo hace 'u = Usuario(); u.email = "[email protected]" ' –

Respuesta

4

Una instancia puede manejar muchas solicitudes a lo largo de su vida útil. En el modelo de subprocesamiento de python runtime, cada instancia solo puede manejar una única solicitud en un momento dado. Si llegan dos solicitudes al mismo tiempo, pueden ser manejadas una después de otra por una sola instancia, o una segunda instancia puede ser generada para manejar la solicitud.


EDIT:

En general, las variables utilizadas por cada solicitud serán como alcance método .get() o .post() de una instancia de RequestHandler, y por lo tanto no pueden "fuga" en otras solicitudes. Debe tener cuidado con el uso de variables globales en sus scripts, ya que se almacenarán en caché en la instancia y se compartirán entre las solicitudes. No uses globales sin saber exactamente por qué quieres hacerlo (que es un buen consejo para cualquier aplicación, para el caso), y estarás bien.

1

App Engine construye dinámicamente y desglosa las instancias según el volumen solicitado .

De the docs:

aplicaciones App Engine son alimentados por cualquier número de instancias en cualquier momento dado, dependiendo del volumen de solicitudes recibidas por su aplicación. A medida que las solicitudes para su aplicación aumentan, también lo hacen el número de instancias que lo activan.

Cada instancia tiene su propia cola para solicitudes entrantes. App Engine supervisa el número de solicitudes que esperan en cada cola de la instancia . Si App Engine detecta que las colas para una aplicación son demasiado largas debido al aumento de la carga , crea automáticamente una nueva instancia de la aplicación para manejar que carga.

App Engine escalas instancias en reversa cuando disminuyen los volúmenes de solicitud. En esta forma , App Engine garantiza que todas las instancias de su aplicación están siendo utilizadas para una eficiencia óptima. Esta escala automática hace que ejecutar App Engine sea tan rentable.

Cuando una aplicación no se está utilizando todo, App Engine se apaga sus instancias asociadas, pero fácilmente les vuelve a cargar tan pronto como estén necesario.

Cuestiones relacionadas