Percorso: /programmazione/python/jupyter/architettura
Focus: Come il codice viene trasmesso, eseguito e restituito.
::: info
L'architettura di Jupyter è completamente disaccoppiata. L'interfaccia (VS Code o Browser) non sa "nulla" di come si esegue il codice; delega tutto a un processo separato chiamato Kernel.
:::
Il Kernel è un processo separato che esegue il codice dell'utente.
- Stato Persistente: Il kernel mantiene in memoria tutte le variabili finché non viene riavviato.
- Multi-Linguaggio: Sebbene il più comune sia
ipykernel (Python), esistono kernel per C++ (xeus-cpp), Julia, R, Bash e persino linguaggi per microcontrollori.
La comunicazione tra il Frontend e il Kernel avviene tramite socket asincroni ZeroMQ. Esistono 5 canali principali:
- Shell: Invia richieste di esecuzione e riceve risposte (bloccante).
- IOPub: Canale broadcast dove il kernel "pubblica" gli output (testo, immagini) in tempo reale.
- Stdin: Per le richieste di input interattivo dall'utente.
- Control: Canale ad alta priorità per i comandi di interruzione (Stop) o shutdown.
- Heartbeat: Verifica costantemente se il kernel è ancora "vivo" (connesso).
sequenceDiagram
participant FE as VS Code (Frontend)
participant JS as Jupyter Server
participant K as Kernel (Backend)
FE->>JS: Request Execute Cell
JS->>K: Send code via ZMQ Shell Socket
K->>K: Processing Logic
K-->>JS: Stream stdout/stderr via IOPub
JS-->>FE: Update Cell Output UI
K-->>JS: Status: Execution Idle
JS-->>FE: Finish Cell Progress Bar
Sotto il cofano, un notebook è un semplice file JSON.
- Struttura: Contiene una lista di
cells, metadati sul kernel e gli output codificati in Base64 (per le immagini).
- Rischio Ingegneristico: Se modifichi un file
.ipynb manualmente in un editor di testo e rompi una virgola, l'intero documento diventa illeggibile.
Per sperimentare logiche di basso livello o performance estreme nel tuo laboratorio:
- Installa xeus-cpp tramite
mamba o conda.
- Ti permette di scrivere C++ interattivo, visualizzando strutture dati complesse come se fossero oggetti Python.
Tags: #Architecture #ZeroMQ #Kernels #JSON #CScience*