Em meu aplicativo, o estado de um objeto comum é alterado por meio de solicitações, e a resposta depende do estado.
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')
Se eu executar isso no meu servidor de desenvolvimento, espero obter 1, 2, 3 e assim por diante. Se as solicitações forem feitas de 100 clientes diferentes simultaneamente, algo pode dar errado? O resultado esperado seria que cada 100 clientes diferentes vissem um número exclusivo de 1 a 100. Ou algo assim acontecerá:
- Cliente 1 consultas.
self.param
é incrementado em 1. - Antes que a instrução de retorno possa ser executada, o thread muda para o cliente 2.
self.param
é incrementado novamente. - O encadeamento volta para o cliente 1 e o cliente recebe o número 2, digamos.
- Agora o tópico passa para o cliente 2 e retorna o número 3 para ele.
Como havia apenas dois clientes, os resultados esperados eram 1 e 2, não 2 e 3. Um número foi ignorado.
Isso realmente acontecerá quando eu aumentar meu aplicativo? Quais alternativas para uma variável global devo olhar?