Simulador didático de elevadores com diferentes cenários (1, 2 ou 4 elevadores) usando Python, Flask e threads para movimentação contínua até todos os passageiros chegarem ao destino.
| Componente | Uso |
|---|---|
| Python 3.13 | Linguagem principal |
| Flask / Werkzeug | API HTTP + templates HTML |
| flask-cors | Habilita CORS para as rotas de API |
| threading (stdlib) | Uma thread por elevador (loop infinito) |
| time (stdlib) | Simulação de tempo de deslocamento |
passengers.json |
Fonte de dados inicial dos passageiros |
(thread aparece em requirements.txt, mas o código atual usa apenas threading.)
- Orientação a Objetos:
Elevator(estado e movimento) eSimulation(orquestra cenários, estado compartilhado). - Thread-per-worker: cada elevador roda em uma
threading.Threaddaemon, atualizando o estado de forma cooperativa (pausas comsleep). - Estado compartilhado simples: listas mutáveis (
passengers,log) injetadas no construtor dos elevadores (forma leve de Dependency Injection). - Separação mínima: camada web (
app.py) vs lógica de domínio (app/elevator.py,app/simulation.py). - Dados idempotentes:
resetrecria totalmente estruturas (não há persistência externa).
app.py # Flask + rotas HTML/API
app/
elevator.py # Classe Elevator
simulation.py # Classe Simulation (criação e controle dos cenários)
passengers.json # Lista de passageiros (campos: name, destiny_floor, ...)
templates/ # Páginas HTML (home e cenários)
static/ # CSS / JS para visualização
Cada conjunto (1, 2 ou 4 elevadores) possui trio de rotas:
GET /api{N}/state– Estado atual (elevadores, passageiros, log).POST /api{N}/start– Inicia threads dos elevadores (idempotente).POST /api{N}/reset– Reinicia completamente o cenário.
Exemplos: /api1/state, /api2/start, /api4/reset.
Rotas HTML: / (home), /simulacao1, /simulacao2, /simulacao4.
git clone https://github.com/schulzdimitrii-study/elevator-simulator.git
cd elevator-simulator
# (Opcional) Criar ambiente virtual
python3 -m venv .venv
source .venv/bin/activate # macOS/Linux
pip install -r requirements.txt
python app.py # inicia em http://localhost:8080curl http://localhost:8080/api1/state
curl -X POST http://localhost:8080/api1/startEdite passengers.json (ex.: destino, nomes). Ao alterar, use POST /apiN/reset para recarregar.
- Não há locks: a simplicidade do loop e escrituras sequenciais minimizam condições de corrida, mas não é thread-safe para uso crítico.
- Sem persistência; toda simulação vive em memória enquanto o processo roda.
- Uso educacional / protótipo.
- Adicionar prioridade ou multiple boarding por viagem.
- Métricas de desempenho (tempo médio de espera / viagem).
- Locks ou filas thread-safe para robustez.
MIT License – Uso livre para estudo.