[Python] Applicazione multithreading

Enrico Franchi enrico.franchi a gmail.com
Mer 21 Mar 2007 19:12:39 CET


On 21/mar/07, at 17:40, Giovanni Porcari wrote:

> Il che la dice lunga su come sia difficile imparare a usare bene i  
> thread.
> Se è più complesso di twisted deve essere davvero una follia :D

Scherza, ma programmare *bene* con i threads, in sistemi complessi e  
con un certo grado di dipendenza reciproca
è tutt'altro che facile. Pensa tipicamente al numero di pagine spese  
a riguardo nei testi di sistemi operativi
e al fatto che i teorici continuino a cercare nuove strutture di  
sincronizzazione

> Il problema di twisted, a mio avviso, è che è molto grosso,  
> complesso, poco documentato
> e stratificato in varie versioni. Se non sai bene come fare ti ci  
> perdi.

Si. Ma è anche modulare. Io a suo tempo mi sono imparato le deferred  
e poi solo le parti che a me servivano.
Mi ci sono trovato bene. E conoscevo Python da qualche mese.

> Inoltre ti costringe a pensare tutto alla twisted.

Vero. D'altra parte anche Python ti 'costringe' a pensare in un certo  
modo.
Ti dirò di più, quasi ogni framework tende a prediligere un certo  
modo di
lavorare e 'andarci contro' fa sputare sangue.

Pensa per dire a scrivere un'applicazione con Java. Anche li  
l'ambiente tira
fortemente per fartela strutturare in un dato modo.

> Ovvero per ogni libreria che usi o che hai scritto
> ne devi immaginare una versione non bloccante che usi le deferred.

In realtà dipende da cosa fa la libreria, eh.

> Per il framework che stiamo scrivendo avevamo pensato inizialmente  
> a twisted (buttandoci su quasi un anno)
> ma alla fine ci siamo 'accontentati' di modpython.

Queste sono chiaramente scelte. Nota che io non sono (come Valentino)  
un fan sfegatato di Twisted.
Mi era piaciuto, ma sono anni  che non lo tocco.

Io mi limito a constatare che utilizzare i thread in ambiente  
stateful sia tendenzialmente masochista.
Che per inciso è la stessa posizione che hanno Van Roy e Haridi nel  
loro libro (che utilizza Oz, ma
questo è un altro discorso). I thread in ambiente funzionale sono una  
figata e basta: non hai race
conditions poichè lo stato non è condiviso.

> Ci ritorneremo e forse ne tireremo fuori una versione basata su  
> twisted ma so che non sarà una passeggiata. :)

Probabile.

-enrico



Maggiori informazioni sulla lista Python