[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