[Python] Concorrenza differita (era: Re: Deploy con nginx e proxy_pass)

Nicola Larosa nico a tekNico.net
Mar 24 Dic 2013 13:44:37 CET


Roberto De Ioris wrote:
> #callback based:
> 
> def pluto():
>     print("fine");
> 
> def topolino():
>     wait_for('pluto', pluto)
> 
> def pippo():
>     wait_for('topolino', topolino)
> 
> wait_for('pippo', pippo)
> 
> # coroutine/greenthread/stackswitch/blah blah based:
> 
> wait_for('pippo')
> pippo()
> wait_for('topolino')
> topolino()
> wait_for('pluto')
> pluto()
> 
> 
> Personalmente trovo molto piu' leggibile la seconda forma (anche se
> internamente l'implementazione e' piu' complessa) Se sei un fan di Go mi
> darai regione (visto che e' come funzionano le goroutine) ;)

Ti do ragione completamente. Anch'io trovo poco leggibile dover
saltellare per il codice alla ricerca di callback annidate o agganciate,
e la sintassi pseudosincrona permette di usare il modello a eventi
asincroni, unico modo per scalare tanto, senza doversi aggrovigliare
appresso alle callback.

Ai tempi di Twisted favorivo la sintassi pseudosincrona delle inline
callback a quella nativa, e questa è una delle tante cose che non mi
piacciono di Javascript. Se capisco bene, le promise sono un tentativo di
avere sintassi pseudosincrona anche lì.

E ci hai preso in pieno con l'accenno a goroutine e channel in Go. :-)

Anche in Tornado puoi avere la sintassi pseudosincrona usando
gen.coroutine, quindi magari puoi ripensare se includere di default il
relativo plugin in uWSGI. ;-)


(Gli scatoloni chiamano, ma non potevo non rispondere. :-) )

-- 
Nicola Larosa - http://www.tekNico.net/

We need whistleblowers. We need to know exactly how the NSA and other
agencies are subverting routers, switches, the Internet backbone,
encryption technologies and cloud systems. I already have five stories
from people like you, and I've just started collecting. I want 50.
There's safety in numbers, and this form of civil disobedience is the
moral thing to do. - Bruce Schneier, September 2013



Maggiori informazioni sulla lista Python