Google App Engine の WebApp2 アプリケーションで次のコードを検討してください。
count = 0
class MyHandler(webapp2.RequestHandler):
def get(self):
global count
count = count + 1
print count
ページを更新するたびに、カウントが増加します。
私は、すべてのリクエストが新しいグローバル環境である PHP の世界から来ました。ここで起こっていることを理解しているのは、WebApp2 に wsgi 構成を使用しているため、Python は要求ごとに新しいプロセスを開始しないということです。一方、cgi 構成を使用していた場合、グローバル環境は PHP のように毎回再インスタンス化されます...
上記が正しいと仮定します(そうでない場合は、私を修正してください)...
- リクエストの存続期間中のみ持続するグローバル変数が必要なシナリオを処理するにはどうすればよいですか? RequestHandler クラスにインスタンス変数を配置することもできますが、メッセージ オブジェクトの格納などのためにグローバル変数を使用する、インポートするユーティリティ モジュールなどについてはどうでしょうか。
- すべての変数をリセットする、または環境の再インスタンス化を強制する何らかの手法はありますか?
- グローバル環境は無期限に存続しますか? それとも、ある時点で自動的にリセットされますか?
- この GAE 固有のものはありますか、それとも wsgi グローバル永続性はどのサーバー シナリオでも同じように機能しますか?
編集:
スレッドローカルを使用した試みは次のとおりです。
count = 0
mydata = threading.local()
mydata.count = 0
class MyHandler(webapp2.RequestHandler):
def get(self):
global count
count = count + 1
print count
mydata.count = mydata.count + 1
print mydata.count
これらもリクエスト間で増加します