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