3
グローバル変数はフラスコ内でスレッドセーフですか?リクエスト間でデータを共有するにはどうすればよいですか?
私のアプリでは、リクエストを行うことで共通オブジェクトの状態が変更され、応答は状態によって異なります。 class SomeObj(): def __init__(self, param): self.param = param def query(self): self.param += 1 return self.param global_obj = SomeObj(0) @app.route('/') def home(): flash(global_obj.query()) render_template('index.html') 開発サーバーでこれを実行すると、1、2、3などになると期待しています。100の異なるクライアントから同時にリクエストが行われた場合、何か問題が発生する可能性がありますか?予想される結果は、100の異なるクライアントがそれぞれ1から100までの一意の番号を表示することです。または、次のようなことが起こります。 クライアント1が照会します。self.param1ずつ増加します。 returnステートメントを実行する前に、スレッドself.paramはクライアント2に切り替わります。再びインクリメントされます。 スレッドはクライアント1に戻り、クライアントには、たとえば、番号2が返されます。 これでスレッドはクライアント2に移動し、クライアントに番号3を返します。 クライアントが2つしかないため、期待される結果は2と3ではなく1と2でした。数値はスキップされました。 これは、アプリケーションをスケールアップするときに実際に起こりますか?グローバル変数に代わるものは何ですか?