[Python] Non blocking http server e integrazione con database relazionali

Manlio Perillo manlio.perillo a gmail.com
Lun 17 Mar 2014 11:35:25 CET


2014-03-15 7:42 GMT+01:00 Nicola Larosa <nico a teknico.net>:

> Manlio Perillo wrote:
>
>> > [...]
>
>  Twisted offre un framework per la programmazione asincrona da anni,
>> ma non è mai stato di moda, perchè molto più difficile.
>>
>
> Non ha avuto grande successo per vari altri motivi: avanti sui suoi
> tempi, documentazione carente, e anche insistenza sulla sintassi a
> callback preferita alle inline callback.
>
>
Secondo me molto ha influito il fatto che non fosse compatibile con il
resto del mondo Python.

>
>
>  Considerato tutti i problemi che gli utenti hanno con tornado e
>> friends (e che nemmeno sanno di sapere), direi che, come sempre,
>> "explicit is better than implicit".
>>
>
> Poco ma sicuro. Creare punti impliciti di cambio di contesto, come fanno
> gevent ed eventlet, e come fanno i thread preemptive, è ingestibile.
>
>
Si, ma con gevent i punti di cambio di contesto sono "deterministici".
Non sono espliciti, ma se la libreria che usa le coroutine è scritta bene
sai dove può avvenire lo switch, anche se magari sommerso tra 5-10 funzioni
(cosa non bella, in effetti, ma è proprio uno dei "problemi" con yield che
ti devi portare dietro sempre)


>
>  Il mio suggerimento è sempre quello di imparare prima le basi (vicino
>> a quello che realmente succede) e solo dopo utilizzare cose che
>> rendono la programmazione e manutenzione più semplice.
>>
>
> Se con questo intendi passare per la sintassi a callback prima di usare
> la pseudo sincrona, non sono d'accordo.


No, indendevo capire quello che succede "sotto il cofano", altrimento non
ci si rende conto dei possibili problemi e/o come risolverli.


> Non si tratta di basi, è
> semplicemente un modo diverso, molto meno leggibile, di scrivere codice
> asincrono.
>
> Ormai le Promises ci sono anche in Javascript, non ha senso insistere col
> vecchio modello. Però andare troppo oltre e rinunciare agli yield, che
> marcano i punti di cambio di contesto, significa andarsela a cercare.
>
> Glyph Lefkowitz, cioè Mr. Twisted, fa un'ottima panoramica delle opzioni
> disponibili, ed illustra bene i pericoli di usare una sintassi implicita:
>
> "1. Straight callbacks: Twisted’s IProtocol, JavaScript’s on<foo> idiom,
> where you give a callback to something which will call it later and then
> return control to something (usually a main loop) which will execute
> those callbacks,
>
> 2. “Managed” callbacks, or Futures: Twisted’s Deferred, JavaScript’s
> Promises/A[+], E’s Promises, where you create a dedicated
> result-that-will-be-available-in-the-future object and return it for the
> caller to add callbacks to,
>
> 3. Explicit coroutines: Twisted’s @inlineCallbacks, Tulip’s yield from
> coroutines, C#’s async/await, where you have a syntactic feature that
> explicitly suspends the current routine,
>
> 4. and finally, implicit coroutines: Java’s “green threads”, Twisted’s
> Corotwine, eventlet, gevent, where any function may switch the entire
> stack of the current thread of control by calling a function which
> suspends it.
>
>
Go non ha una sintassi per sospendere esplicitamente una goroutine; quindi
appartiene a 4) ?

> [...]


Ciao   Manlio
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20140317/f00a3813/attachment.html>


Maggiori informazioni sulla lista Python