2012-05-03 3 views
1

App Engine과 Webapp2를 사용하여 사이트를 개발 중입니다.App Engine의 객체 인스턴스

OO의 개념을 이해하고 있으며 파이썬에서 어떻게 적용되는지 알 수 있습니다. 그러나 App Engine이 OO를 사용하는 방법에 대해 혼란스러워합니다. 내 앱 인스턴스가 만들어지면 각 클래스의 인스턴스 하나가 만들어지고 각 사용자에게 다시 사용됩니까? 또는 각 사용자별로 별도의 인스턴스가 생성 되었습니까? 인스턴스 또는 클래스 변수를 사용해야하는지 여부를 결정합니다.

더욱 구체적으로 말하자면 언제 내가 스스로를 사용해야합니까? 변수 (인스턴스 변수) 및 언제 자기를 생략해야합니까? (클래스 변수)?

도움 주셔서 감사합니다. :)

답변

3

객체 지향 (OO)과 요청 처리의 개념을 구분할 것입니다. 무엇보다도 App Engine은 요청 기반 모델을 기반으로합니다. 요청은 App Engine에서 트리거되는 대부분의 작업에 대한 기반입니다.

두 번째로 App Engine 인프라에서 제공하는 App Engine 인스턴스 [0]과 App Engine 인프라에서 제공하는 App Engine 인스턴스 [0] 사이의 차이점에 유의해야합니다. 이는 webapp2.WSGIApplication [1]입니다. 정의한 클래스의 객체 인스턴스

일을 단순화하기 위해 앱에 1 개의 webapp2.WSGIApplication 만 있다고 가정합니다. 이제 응용 프로그램이 가져 오는 첫 번째 요청부터 시작해 보겠습니다. 그 전에는 App Engine 컴퓨터에서 사용할 수있는 코드와 구성을 제외하고는 앱이 존재하지 않습니다. 요청이 App Engine에 도달하면 새로운 App Engine 인스턴스 [0]이 생성됩니다. App Engine 인스턴스가 설치되고 설정되면 webapp2.WSGIApplication 인스턴스 [1]가 인스턴스화됩니다. 이제는 관련 "인스턴스"를 둘 다 가지고 있으며 객체는 컨테이너의 일부입니다. 그런 다음 들어오는 요청은 수행 한 구현에 따라 요청을 처리 할 webapp2.WSGIApplication 인스턴스로 라우팅됩니다.

App Engine 시스템은 부하에 따라 새로운 App Engine 인스턴스를 생성합니다. 단일 인스턴스가 들어오는 모든 요청을 처리 할 수없는 경우 새 인스턴스가 만들어지고 (처음에는 [0], 그 다음에는 [1])로드가 분산됩니다. 그래도 충분하지 않으면 세 번째 인스턴스가 만들어집니다. 부하가 감소하면 마찬가지입니다. 응용 프로그램이 현재 3 개의 인스턴스에서 실행 중이지만 2 개만로드를 처리 할 수 ​​있으면 1 개의 인스턴스가 종료됩니다. 또한 특정 인스턴스가 어떤 요청을 처리 할지도 알지 못합니다.

그러면 인스턴스 변수에 의존해야하는 두 번째 질문이 생깁니다. App Engine은 인스턴스가 적절하게 생성되고 종료되기 때문에 어떤 인스턴스가 요청을 처리하는지 알지 못하기 때문에 항상 인스턴스가 비 상태라고 가정해야합니다. 항상 그런 것은 아니지만 잠재적으로 모든 요청은 완전히 새로운 인스턴스에 의해 처리 될 수 있습니다.

상태가 필요한 경우 memcache (휘발성) 또는 데이터 저장소 (영구) 또는 다른 데이터 백엔드 (blobstore, 파일 API 등)를 사용하십시오.

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

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

PS : 사람들이 고급 기술을 고려해야 앱 엔진에 대해 배울 시작 요청하지만, 초보자를 최적화하기 위해 인스턴스 메모리를 사용합니까.

+0

안녕하세요 schuppe. 나는 당신의 대답에 대해 당신에게 결코 감사함을 느끼지 못했습니다. 감사합니다. 그것은 제 질문에 대한 매우 명확하고 간결한 대답이었습니다. –

+0

다행스럽게도 :) – schuppe