В моем приложении состояние общего объекта изменяется путем запросов, и ответ зависит от состояния.
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. Число было пропущено.
Будет ли это происходить, когда я увеличиваю свое приложение? На какие альтернативы глобальной переменной я должен смотреть?