On 03/01/2014 16:41, enrico franchi wrote:
2014/1/3 Manlio Perillo <[email protected]
<mailto:[email protected]>>
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
[email protected]
http://lists.python.it/mailman/listinfo/python