Trova il valore di p sapendo che ogni funzione deve/può calcolare solo una operazione algebrica alla volta
p = 2*(3 + 2) + (7 – 4) + [(2*3)*(5-1)] = 37
p = x + y + z
Programmazione Python
Gestione dei processi e dei Thread in Python con esercizi guidati per Istituti Tecnici Tecnologici
I thread in Python
I thread sono la naturale evoluzione delle tecniche di fork/join viste in queste pagine. Come ampiamente trattato sui manuali, il thread non condivide tutto il codice del processo che lo genera e non c’è quindi la necessità di selezionare gli opportuni percorsi nel codice tra processi padre/figlio. Il thread è più snello anche da creare e gestire, seppur con limiti. Vediamo come in Python.
Somme su indici di un vettore con due processi in Python
Dato un vettore di 10 interi, dire se la somma degli elementi di posto pari è maggiore della somma degli elementi di posto dispari. Implementare il precedente algoritmo con una programmazione concorrente che preveda esattamente due sotto-processi in parallelo fornendo il grafo delle precedenze.
Il costrutto fork vs join
Tecnica mediante la quale possiamo suddividere un processo, come già abbiamo fatto, e ricongiungerlo alla fine per usare i risultati calcolati.
La chiamata waitpid() in Python
Abbiamo già visto in precedenza la chiamata wait(), come permetta ad un padre di attendere la terminazione dei suoi figli, in questo caso tutti i figli, a prescindere che siano uno o più. Esiste anche una variante per cui si può forzare il padre ad attendere solo un determinato figlio di cui è noto il PID.
La chiamata wait() in Python
Abbiamo visto, nelle esercitazioni precedenti, il comportamento non deterministico delle chiamate fork con l’esecuzione di figli, anche simulando codice con la chiamata time.sleep(). Il comportamento in questi casi è lasciato allo scheduler ma in molti casi, è consigliabile che il padre attenda l’esecuzione dei figli, magari per raccogliere i dati elaborati e usarli nel flusso principale.
Esempio 03 – Fork annidate ed esecuzione non deterministica
Vediamo un esempio un po’ più complesso con più fork messe in campo. Quanti processi vengono generati dal codice scritto? In allegato un diagramma disegnato sul sito draw.io con il formato xml modificabile/importabile o il png per visionarlo semplicemente.