[Python] saluti e prima domanda sulle list comprhension
Enrico Franchi
enrico.franchi a gmail.com
Lun 28 Gen 2008 17:44:44 CET
On Jan 28, 2008, at 11:32 AM, quilospam a email.it wrote:
> Bho, fore ora andiamo anche OT, ma mi sento di dissentire quest'ultima
> affermazione.
Dissenti, ma sbagli :)
> Se non altro dopo tutti i vari "filosofi a cena" e "barbieri"
> fatti a laboratorio concorrente.
Quindi? In primo luogo, cerchiamo di capire quale è il senso. Sono
problemi *teorici*, spesso usati come metro per valutare una nuova
primitiva di sincronizzazione. Ancora una volta, in se e per se, è un
discorso accademico/teorico.
Ci sono contesti in cui bisogna gestire i thread (esempio in un
kernel, o in particolari applicazioni semi-embdedded). Su
un'applicazione di alto livello, la cosa non funziona, non scala. Non
ci sono santi. MySQL ha dimostrato chiaramente come il modello a
thread scali male sull'I/O.
Ma ci sono un mucchio di esempi.
Lo stato condiviso è creare un problema e poi mostrare come si può
risolverlo. Il che mi diverte anche quando affronto le cose da un
punto di vista teorico *e* mi interessa pure se non ho altra strada.
Ma quando posso evitare, lo faccio e basta: tipicamente non ho tempo
da perdere.
Potrei anche citarti le parole di Van Roy e Haridi. Ormai le ho copia-
incollate tante di quelle volte che quasi le so a memoria. <g>
> I Thread lavorano su strutture dati
> condivise. E in generale il dato condiviso fa parte dello stato del
> programma...
Solo ed esclusivamente se uno vuole cattive performance e divertirsi a
debuggare race conditions e altri heisenbugs.
In particolare il modo più naturale per lavorare fra thread è
precisamente quello del passaggio di messaggi.
Nota che è qualcosa che ci viene insegnato anche dalla comune
esperienza: se devi mettere due persone a lavorare su qualcosa, è bene
dividere le responsabilità e fare comunicare, *non* lasciare che
mettano le mani nelle stesse cose. Tra l'altro un computer è
notevolmente più stupido di un essere umano, per cui non ha il buon
senso di non fare certe cose: il tutto resta a carico del
programmatore. Programmatore che avrebbe anche di meglio da fare,
diciamocelo.
> Ma secondo me è più un problema di stile, senz'altre conseguenze
> pratiche. A
> me pare più pulito usare i thread, certo sarebbe meglio creare un
> pool di
> thread da riciclare... e forse lo farò, ma di sicuro non è l'obiettivo
> principale dell'esame.
E sbagli: il punto chiave è che proprio il meccanismo a thread non è
particolarmente adatto. Non solo, in un mondo in cui si va verso il
grid-computing, è pure anacronistico. Hai due modi efficienti di
gestire la cosa:
1. usare la programmazione asincrona (ma gestirla a basso livello è
una rogna, specie se devi ben intervallare compiti di calcolo e
compiti di I/O.
2. usare un modello a processi.
In questo caso è tutto *assolutamente* banale. Hai un processo 'padre'
che coordina il tutto e dei processi figli che chiedono informazioni
su cosa eseguire. Lanciare processi in unix (e anche farlo con python)
è qualcosa di oltremodo poco costoso. Ma tu tra l'altro non vuoi
veramente lanciare una caterva di processi. Diciamo 5 processi
(contando il padre). O 9. O un numero che piace a te. Il padre
(possibilmente in maniera asincrona -- ma a questo punto è abbastanza
facile anche senza oggetti di alto livello) ascolta i figli. Questi
danno informazioni e prendono ordini. Il padre ha l'informazione
'totale' e quando si ha finito risponde.
> Per la cosa del proff, dovrebbe essere abbastanza tranquillo, di
> solito se
> (raramente!) non capiscono qualcosa non pensano che sia sbagliato,
> ma anzi
> si complimentano di aver usato cose nuove e di avergliele fatte
> scoprire :-)
Sarai fortunato, vah.
> Comunque, per quanto sia un confronto che mi stimola, forse è meglio
> non
> farlo su questa ml ( mano che gli admin non siano un po' elastici :-D)
Gli 'admin' non saprei neppure dire chi sono, in effetti. Cioè quelli
'fisici' direi di si, quelli 'spirituali' non so più come si situa la
ML rispetto a python.it e di conseguenza rispetto a Python Foundation.
Ad ogni modo ti garantisco io di persona personalmente che non ci sono
problemi e si può proseguire. Anche non volendo *siamo* IT.
More information about the Python
mailing list