docsによると:フラスコセッション変数はスレッド間で状態を維持しますか?
セッションは基本的に別の 要求からの情報を覚えておくことが可能になるが。
しかし、他の場所では、the docs sayそのsession
はスレッドに対してローカルです。したがって、flask
がマルチスレッド環境(たとえば、app.run(threaded=True)
)で使用されている場合、どうすればこの約束を果たすことができますか?
私は2つのだけの選択肢を参照してください。
flask
は何とかつのタブで、単一のユーザーの閲覧は彼の最初のを待つ必要があるため、同じユーザーセッションは常に恐ろしいようだ同じスレッド(によってサービスされることを保証しますsession
はスレッドを許可していて、セッション固有の情報をデータベースに保存する必要があります(予期せず、ドキュメントには記載されていないようです)
何か不足していますか?
編集:
session
自体は(つまり、Pythonは各スレッドのsession
完全に独立したオブジェクトとしてを見ている)のpythonの観点から、スレッドローカル変数であるが、それは何らかの形でスレッド間で同期されている:私は別の選択肢があると思いますflask
(おそらく、いくつかのプロセス全体のインメモリデータ構造で)。その場合、flask
はすべての変更をsession
アトミック(スレッド間の同期メカニズムを使用して)にすることができます。
アップデート:@Daniel Rosemanの回答に基づいて、私の最後の推測は正しいですが、フラスコはそれ自体ではなく、永続的な状態を格納/取得するよう要求します(したがって、状態はフラスコプロセスまたはフラスコアプリケーションではなく、ユーザーエージェントが状態を永続化させる何らかの要求の集まり - 何をユーザセッションと呼んでもよい)。あなたが引用された1後非常に次の文から
は、バックエンドセッションミドルウェア – reptilicus
@reptilicusを実装していない限りクッキーを使用しますが、クッキーは実際にセッションの状態データAFAIKを保存しません。セッションに固有の識別子だけを格納します。どの状態情報も 'session'変数に格納しなければなりません。したがって、複数のスレッドが同じセッションであることを認識しているかもしれませんが、他のスレッドによって 'session'変数に書き込まれたデータにアクセスすることはできません。これは 'session'変数の目的をすべて破ります。 – max
基本的に必要なものはすべて保存できます。それは基本的にdictのように動作します。 – reptilicus