On 03/01/2014 16:41, enrico franchi wrote:
2014/1/3 Manlio Perillo <manlio.peri...@gmail.com <mailto:manlio.peri...@gmail.com>> Per concludere, tieni conto che usare cose come Tornado è tutt'altro che banale. Beh, fare scalare qualcosa di non asincrono e' ancora meno banale, IMHO.
No, direi che è banale. Usi Apache + mod_wsgi e spendi tanti bei soldi in hardware :)
Tutto lo stack (applicazione + framework + eventuali librerie) deve essere sviluppato con la programmazione asincrona in mente. Vero. Ma d'altra parte non e' che ci sia un mucchio di soluzioni. O molli python del tutto...
Le soluzioni ci sarebbero pure. A livello di sistema operativo il supporto c'è. Il problema è che non è uniforme come dovrebbe. Vedi ad esempio le differenze nell'implementazione di posix_aio, il fatto che posix_aio funziona solo sui file ma nulla vieta in teoria di usarlo anche per i socket e altro.
Vedi il fatto che USB che è asincrono per natura, nelle varie implementazioni non usa l'interfaccia posix_aio, ma una diversa (parlo di USB perchè lo devo usare per un progetto personale e mi sto sentendo male a vedere come è implementato).
Vedi il fatto che su Windows hai solo l'equivalente di posix_aio ma non quello di epoll/kqueue. Potrei continuare all'infinito...
L'altra mancanza grave è l'implementazione dei "protocolli" di comunicazione. Nella libreria standard di Python (ma non solo) hai praticamente dei *giocattoli*. Le implementazioni serie sono nei framework asincroni, ed **ognuno** reimplementa tutto e funziona solo con quel framework. La libreria standard di Python reinventerà tutto di nuovo, perchè avrà il suo bel framework asincrono, su cui poi si dovranno reimplementare tutti i protocolli.
L'API migliore che ho visto è quella della libpq, per la cronaca. Migliore perchè non dipende da nessun framework, e si mantiene usabile. [[piccolo rant di inizio anno]]
E' vero che ci sono dei monkey patch per alcune funzioni della libreria standard, ma non ritengo sia saggio affidarsi ciecamente a loro. Funzionicchiano, via. Parlo di gevent, non so quelli di tornado.
Visto che Tornado usa gevent, immagino si basi su quelli.
Python e la libreria standard semplicemente non sono pensati per un ambiente a green thread. Ma no, se hai un martello sufficientemente grande (e non hai paura di usarlo) si fa tutto. ;)
Incluso scassare tutto alla prima disattenzione. ;)
Si, vero che non sono pensati, quello e' indubbio. Pero' diciamo che ce la si fa… ;) -ho visto perfino django martellato a forza in logiche asincrone (backend, non frontend) -
Ciao Manlio _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python