У моєму додатку стан загального об'єкта змінюється шляхом надсилання запитів, і відповідь залежить від стану.
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 може бути виконаний, потік перемикається на клієнт 2.
self.param
знову збільшується. - Потік повертається до клієнта 1, і клієнту повертається номер 2, скажімо.
- Тепер потік переходить до клієнта 2 і повертає йому номер 3.
Оскільки клієнтів було лише двоє, очікувані результати були 1 і 2, а не 2 і 3. Кількість пропущено.
Чи насправді це станеться, коли я масштабую свою заявку? На які альтернативи глобальній змінній слід подивитися?