[Python] saluti e prima domanda sulle list comprhension
Enrico Franchi
enrico.franchi a gmail.com
Mar 29 Gen 2008 12:21:38 CET
On Jan 28, 2008, at 8:43 PM, Pietro Battiston wrote:
> In sostanza: concesso che utilizzare tanti thread che fanno le stesse
> cose sia sbagliato per motivi di comodità e/o di efficienza, ammettete
> casi in cui invece sia bene utilizzare i thread per fare cose diverse?
In generale no. I thread (a memoria condivisa) sono praticamente
*sempre* una complicazione a livello applicativo.
Personalmente ammetto i thread come sensati solo per staccare un
lavoratore che deve fare un calcolo pesante senza fermare l'UI di un
programma. In questo caso sarebbe comunque possibile un processo nella
maggior parte dei casi, tuttavia il thread può essere più comodo in
presenza di strutture sostanzialmente asincrone *intraprocesso*.
Ovvero a quel punto il thread, appena prima di terminare, notifica la
cosa e il risultato a qualcuno che poi si prende la briga di passare
l'informazione a chi di dovere (sempre in modo asincrono). In
particolare per questa architettura ho in mente specialmente Cocoa. In
altri casi potrebbe essere *comunque* fare fare la cosa ad un processo
e usare altri meccanismi di comunicazione.
Ma nota che a questo punto la faccenda è puramente tecnologica: il
thread si sta comportando esattamente come un processo (perchè lo
rendo completamente cieco a quello che non deve vedere e non gli
permetto di toccare alcunchè). E' un thread poichè nella specifica
piattaforma viene più comodo a livello implementativo, ma a livello
logico/architetturale la struttura è la stessa che se avessi un
processo.
> Il fatto di usare gtk mi dà un modo (semplice) alternativo di dare
> un'azione da eseguire dopo un tot di tempo, senza nel frattempo
> paralizzare la GUI?
Io non conosco GTK, ma nei vari toolkit grafici che ho incontrato ci
sono dei timer che fanno in modo automatico quello che tu vuoi, senza
bisogno di tirarsi fra le palle un thread solo per quello. Se poi
l'azione è *intrinsecamente lenta a livello utente* (ovvero si misura
in termini di *secondi*, che come tempo macchina sono una mezza
eternità), puoi considerare architetture.
Io facendo una banale ricerca su google ho trovato:
http://personal.riverusers.com/~swilhelm/gtkperl-tutorial/timersandio.html
(in Perl, ma dovrebbe essere sostanzialmente adattabile)
E questa è quasi tutta roba asincrona, eh.
More information about the Python
mailing list