Instancias de objetos en App Engine

Estoy desarrollando un sitio usando App Engine y Webapp2.

Entiendo los conceptos de OO y más o menos cómo se aplican en Python. Sin embargo, estoy confundido acerca de cómo App Engine usa OO. Cuando se crea una instancia de mi aplicación, ¿se crea y reutiliza una instancia de cada clase para cada usuario? ¿O se crean instancias separadas para cada usuario? Esto decidirá si debo usar variables de instancia o de clase.

Entonces, para ser aún más específico, ¿cuándo debo usar self? variables (variables de instancia) y cuándo debo omitir self. (variables de clase)?

Gracias por tu ayuda. :)

preguntado el 03 de mayo de 12 a las 11:05

1 Respuestas

Separaría los conceptos de orientación a objetos (OO) y manejo de solicitudes. En primer lugar, App Engine se basa en un modelo basado en solicitudes. Una solicitud es la base para la mayoría de las acciones que se activan en App Engine.

En segundo lugar, tenga en cuenta las diferencias entre una instancia de App Engine[0], que es como un contenedor para su aplicación y proporcionada por la infraestructura de App Engine, y una webapp2.WSGIApplication[1], que es una instancia de objeto de una clase que definiste.

Para simplificar las cosas, asumo que su aplicación solo tiene 1 webapp2.WSGIApplication . Ahora comencemos con la primera solicitud que recibe su aplicación. Antes de eso, no existe nada de su aplicación, excepto el código y la configuración disponibles en las máquinas de App Engine. Una vez que la solicitud llega a App Engine, se crea una nueva instancia de App Engine[0]. Una vez que la instancia de App Engine esté instalada y configurada, creará una instancia webapp2.WSGIApplication[1]. Ahora tiene ambas "instancias" relevantes en su lugar, siendo el objeto parte del contenedor. A continuación, la solicitud entrante se enruta a su instancia webapp2.WSGIApplication, que manejará la solicitud de acuerdo con la implementación que haya realizado.

El sistema de App Engine creará nuevas instancias de App Engine según la carga. Si una sola instancia no puede manejar todas las solicitudes que ingresan, creará una nueva instancia (primero [0], luego [1] dentro de la anterior) y distribuirá la carga. Si eso aún no es suficiente, se crea una tercera instancia y así sucesivamente. Lo mismo es cierto si la carga disminuye. Si su aplicación se está ejecutando actualmente en 3 instancias, pero 2 serían suficientes para manejar la carga, se eliminará 1 instancia. Además, no sabe qué instancia en particular manejará qué solicitud.

Y esto nos lleva a su segunda pregunta, si depende de las variables de instancia. Debido a que App Engine crea y elimina instancias como parece apropiado y no sabes qué instancia maneja una solicitud, siempre debes asumir que las instancias no tienen estado. Si bien no siempre es el caso, potencialmente cada solicitud puede ser manejada por una instancia completamente nueva.

Si necesita tener estado, use Memcache (volátil) o almacén de datos (persistente) o algún otro backend de datos (blobstore, API de archivos, etc.).

[*] https://developers.google.com/appengine/docs/adminconsole/instances

[*] http://webapp-improved.appspot.com/guide/app.html

PD: la gente usa la memoria de instancia para optimizar las solicitudes, pero los principiantes que empiezan a aprender sobre App Engine deberían considerar esta una técnica avanzada.

contestado el 03 de mayo de 12 a las 16:05

Hola schuppe. Me acabo de dar cuenta de que nunca te agradecí tu respuesta. ¡Muchas gracias! Fue una respuesta muy clara y sucinta a mi pregunta. - usuario1372203

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.