[解決済み] flaskアプリケーションでグローバルな状態を保持する [重複]。
質問
キャッシュ辞書を
flask
アプリケーションでキャッシュ辞書を保存しようとしています。
私が理解している限りでは アプリケーションコンテキスト は、特に flask.gオブジェクト を使用する必要があります。
設定します。
import flask as f
app = f.Flask(__name__)
さて、そうすると
with app.app_context():
f.g.foo = "bar"
print f.g.foo
印刷されます。
bar
.
の続きです。
with app.app_context():
print f.g.foo
AttributeError: '_AppCtxGlobals' object has no attribute 'foo'
私はそれを理解していないし、ドキュメントはまったく助けにならない。私がそれらを正しく読むならば、状態は保存されているはずです。
別のアイデア モジュール全体の変数を使用することです。
cache = {}
def some_function():
cache['foo'] = "bar"
しかし、これらはリクエストのたびにリセットされるようです。
これを正しく行うにはどうしたらよいでしょうか。
編集してください。 フラスコ 10.1
どのように解決するのですか?
ご質問の内容からすると、quot;global"の定義について混乱されているのだと思います。
Flaskの純正セットアップでは、複数のスレッドと潜在的に複数のプロセスでリクエストを処理するFlaskサーバーがあります。例えば、"itemlist = []"のようなストックグローバル変数を持っていて、誰かがエンドポイントにPOSTリクエストを行うたびに、リクエストごとにそれを追加し続けたいとします。これは理論的にも実践的にも完全に可能です。また、本当に悪い考えです。
問題は、どのスレッドとプロセスが "win"であるかを簡単に制御できないことです。つまり、ロック、ミューテックス、およびその他のプリミティブについて話す必要があります。これは困難で迷惑なことです。
ウェブサーバー自体を可能な限りステートレスにしておく必要があります。各リクエストは完全に独立しているべきで、サーバー内で状態を共有してはいけません。その代わりに、状態を処理するデータベースやキャッシュレイヤーを使用します。これはより複雑に見えますが、実際にはよりシンプルです。例えばSQLiteをチェックしてみてください、とてもシンプルです。
flask.g'オブジェクトに対処するために、これはグローバルオブジェクトである リクエストごとに .
http://flask.pocoo.org/docs/api/#flask.g
これはリクエスト間で "wiped clean" され、リクエスト間で状態を共有するために使用することはできません。
関連
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] Flaskのリクエストで受信したデータを取得する
-
[解決済み] グローバルGit無視
-
[解決済み] Chromeデベロッパーツールで:hoverの状態を見る
-
[解決済み] リストの順番を維持したまま、重複を削除するにはどうしたらいいですか?
-
[解決済み] Flaskで静的ファイルを提供する方法
-
[解決済み] FlaskのビューからJSONレスポンスを返す
-
[解決済み] Androidでグローバル変数を宣言するには?
-
[解決済み] Flaskの開発サーバーをネットワーク上で見えるように設定する
-
[解決済み] Flaskのルートでクエリ文字列にアクセスする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] Pythonの辞書にあるスレッドセーフについて
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例