私のアプリでは、リクエストを行うことで共通オブジェクトの状態が変更され、応答は状態によって異なります。
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.param
1ずつ増加します。 - returnステートメントを実行する前に、スレッド
self.param
はクライアント2に切り替わります。再びインクリメントされます。 - スレッドはクライアント1に戻り、クライアントには、たとえば、番号2が返されます。
- これでスレッドはクライアント2に移動し、クライアントに番号3を返します。
クライアントが2つしかないため、期待される結果は2と3ではなく1と2でした。数値はスキップされました。
これは、アプリケーションをスケールアップするときに実際に起こりますか?グローバル変数に代わるものは何ですか?