|
- import os
- import time
- import threading
- from .logger_utils import setup_global_logging, log_msg as log
- from .settings import load_settings
-
- # --- NUOVO IMPORT ---
- from .train_executor import run_train_monitor
-
- def build_info() -> str:
- return "core-orchestrator-v1.4-background-train"
-
- def run_all_modes(settings):
- """Lancia in simultanea i processi core: Collect, Infer e il nuovo Train Executor."""
- log("Avvio modalità SIMULTANEA (Collect + Train Executor + Infer)...")
-
- # 1. Importiamo le funzioni dai rispettivi moduli
- from .train_collect import run_collect_train
- from .infer_mode import run_infer
-
- # 2. Thread per la RACCOLTA DATI (Collect)
- t_collect = threading.Thread(target=run_collect_train, args=(settings,), name="CollectorThread", daemon=True)
-
- # 3. Thread per il MONITOR ADDESTRAMENTO (Train Executor)
- # Rileva i file .lock inviati dal Web e addestra il modello in background
- t_train_exec = threading.Thread(target=run_train_monitor, name="TrainExecutorThread", daemon=True)
-
- # 4. Thread per l'INFERENZA (Predict)
- t_infer = threading.Thread(target=run_infer, args=(settings,), name="InferenceThread", daemon=True)
-
- # Avvio di tutti i processi in parallelo
- t_collect.start()
- t_train_exec.start()
- t_infer.start()
-
- log("Tutti i processi core (incluso Train Executor) sono attivi.")
-
- # Mantieni il main process attivo
- while True:
- time.sleep(10)
-
- def main() -> None:
- # Fix percorsi configurazione
- if not os.environ.get("CONFIG"):
- os.environ["CONFIG"] = "/config/config.yaml"
-
- try:
- settings = load_settings()
- setup_global_logging(settings)
- log(f"Core Orchestrator avviato. BUILD: {build_info()}")
-
- mode = str(settings.get("mode", "all")).strip().lower()
-
- if mode == "all":
- run_all_modes(settings)
- elif mode == "collect_train":
- from .train_collect import run_collect_train
- run_collect_train(settings)
- elif mode == "infer":
- from .infer_mode import run_infer
- run_infer(settings)
- elif mode == "train":
- # Questa rimane la vecchia modalità manuale one-shot
- from .train_mode import run_train
- run_train(settings)
- else:
- log(f"Modalità {mode} non riconosciuta.")
-
- except Exception as e:
- print(f"ERRORE CRITICO ALL'AVVIO: {e}")
- import traceback
- traceback.print_exc()
-
- if __name__ == "__main__":
- main()
|