2012-05-03 12 views
1

App EngineとWebapp2を使用してサイトを開発しています。App Engineのオブジェクトインスタンス

私はオブジェクト指向の概念を理解しており、多かれ少なかれ、それらがPythonでどのように適用されているかを理解しています。しかし、私はApp EngineがどのようにOOを使用するかについて混乱しています。私のアプリケーションのインスタンスが作成されると、各クラスの1つのインスタンスが作成され、各ユーザーに再利用されますか?または、ユーザーごとに個別のインスタンスが作成されていますか?これは、インスタンス変数とクラス変数のどちらを使うべきかを決定します。

さらに具体的には、いつ自己を使うべきですか?変数(インスタンス変数)と、いつ自己を除外すべきですか? (クラス変数)?

ありがとうございました。 :)

答えて

3

オブジェクト指向(OO)と要求処理の概念を区別します。まず第一に、App Engineはリクエスト駆動モデルに基づいています。リクエストは、App Engineでトリガーされるほとんどのアクションのベースです。

さらに、App Engineインフラストラクチャによって提供されるApp Engineインスタンス[0]と、App Engineインフラストラクチャによって提供されるコンテナのような相違点に注意してください.Webapp2.WSGIApplication [1]定義したクラスのオブジェクトインスタンス

簡単にするため、あなたのアプリには1つのwebapp2.WSGIApplicationしかないと仮定します。次に、アプリケーションが取得する最初のリクエストから始めましょう。その前に、App Engineマシンで利用可能なコードと設定を除いて、あなたのアプリは存在しません。要求がApp Engineに到達すると、新しいApp Engineインスタンス[0]が作成されます。 App Engineインスタンスが設定され、設定されると、webapp2.WSGIApplicationインスタンス[1]がインスタンス化されます。これで、コンテナの一部である関連する「インスタンス」が両方とも適切な場所にあります。次に、着信リクエストは、実行した実装に従ってリクエストを処理するwebapp2.WSGIApplicationインスタンスにルーティングされます。

App Engineシステムは、負荷に応じて新しいApp Engineインスタンスを作成します。 1つのインスタンスが入ってくるすべての要求を処理できない場合は、新しいインスタンス(最初は[0]、その後は[1])が作成され、負荷が分散されます。それでも十分でない場合は、3番目のインスタンスが作成されます。負荷が減少する場合も同様です。アプリケーションが現在3つのインスタンスで実行されていても、2つで負荷を処理できる場合は、1つのインスタンスが強制終了されます。さらに、どの特定のインスタンスがどの要求を処理するかもわかりません。

これは、インスタンス変数に依存する場合、2番目の質問につながります。 App Engineはインスタンスが適切に作成され、強制終了されるため、どのインスタンスがリクエストを処理するかわからないため、インスタンスは常にステートレスであるとみなす必要があります。常にそうであるとは限りませんが、潜在的にすべての要求は完全に新しいインスタンスによって処理される可能性があります。

状態が必要な場合は、memcache(volatile)またはdatastore(persistent)またはその他のデータバックエンド(blobstore、files APIなど)を使用します。

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

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

PS:人は、この高度な手法を検討する必要がありApp Engineを学び始めるの要求が、初心者を最適化するために、インスタンスのメモリを使用します。

+0

こんにちは。私はちょうどあなたの答えをあなたに感謝したことに気付かなかった。だから、ありがとう!それは私の質問に対する非常に明確で、簡潔な答えでした。 –

+0

うれしかったよ:) – schuppe