| #!/usr/bin/env python3 | |
| """ | |
| App principal para execução no HuggingFace Space. | |
| Este arquivo executa o treinamento do modelo EDA. | |
| """ | |
| import os | |
| import subprocess | |
| import sys | |
| from space_lock import exclusive_training_lock | |
| def main(): | |
| """ | |
| Executa o script de treinamento. | |
| """ | |
| print("=" * 60) | |
| print("Iniciando treinamento do modelo EDA") | |
| print("=" * 60) | |
| script_path = os.path.join(os.path.dirname(__file__), "train.py") | |
| if not os.path.exists(script_path): | |
| print(f"❌ Erro: Arquivo {script_path} não encontrado!") | |
| sys.exit(1) | |
| print( | |
| "A aguardar lock exclusivo (um treino de cada vez na GPU). " | |
| "Se o Space reiniciar em paralelo, os outros processos ficam em fila aqui." | |
| ) | |
| try: | |
| with exclusive_training_lock(): | |
| result = subprocess.run( | |
| [sys.executable, script_path], | |
| check=True, | |
| capture_output=False, | |
| ) | |
| print("\n✅ Treinamento concluído com sucesso!") | |
| return result.returncode | |
| except subprocess.CalledProcessError as e: | |
| print(f"\n❌ Erro durante o treinamento: {e}") | |
| sys.exit(e.returncode) | |
| except KeyboardInterrupt: | |
| print("\n⚠️ Treinamento interrompido pelo usuário") | |
| sys.exit(130) | |
| if __name__ == "__main__": | |
| sys.exit(main()) | |