[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