[Python] Connessioni asincrone verso i database

Alessandro Agosto the.6one6 a gmail.com
Ven 22 Gen 2010 13:05:50 CET


Il giorno 21 gennaio 2010 23.12, Manlio Perillo
<manlio_perillo a libero.it>ha scritto:

> Qualcosa di simile è offerto anche dalla libpq di PostgreSQL:
> http://www.postgresql.org/docs/8.4/static/libpq-async.html
>
Grazie mille per la segnalazione, gli stò dando una occhiata e sembra
interessante, ad una prima occhiata :)

> psycopg2 (uno delle implementazioni DBAPI2 più utilizzate per
> PostgreSQL) ha cercato di implementarne il supporto, ma l'autore ci ha
> rinunciato.

Uhm, questo non mi fà ben sperare. Sapresti per caso indicarmi qualche
discussione o altra risorsa in cui parla dei problemi a cui è andato in
contro?

> Altrimenti, se ho scritto una app in python che non è basata su twisted
> > ma volessi usare una delle sue interfacce asincrone per la connessione
> > ai db avrei qualche problema?
>
> Probabilmente si.

Allora l'unica soluzione credo sia testarle, magari con una semplice app
wsgi su un webserver asincrono.

 Una interfaccia asincrona ti permette di non bloccare un intero thread
> mentre stai aspettando i dati dal database.
> Per fare questo hai bisogno di un qualche sistema che ti dica quando un
> socket è pronto per essere letto.
>
Quando ho scritto il primo modulo di estensione in python ho utilizzato
picoev, una piccola libreria che permette una astrazione sopra le interfacce
epoll/kqueue/select (a differenza di libev, supporta solo questi metodi e
non è altrettanto matura, ma secondo quanto ho visto sembra molto
promettente) e m'era balzata in testa l'idea di provare a usare
l'interfaccia odbc e farla passare attraverso il suo loop, ma poi m'è venuto
il dubbio che potesse lo stesso bloccarmi l'intera applicazione, e cosa più
importante, dall'ignoranza che ho verso le api a disposizione per effettuare
connessioni verso i db, mi pare che queste "nascondano" la socket di
connessione... poi magari mi sbaglio ma ad esempio guardando il link che mi
hai passato su postgres parla di socket ma non dice che la funzione di
connessione ritorna una referenza alla socket usata...
Comunque cercherò meglio.

> Twisted ti offre questo sistema, e molto altro in un ambiente ben
> integrato.
>
> Ma puoi farne a meno, ma riscrivere quello che Twisted offre già non è
> banale, a meno di non avere una applicazione semplice.
>
Eh già, hai proprio ragione.

> La programmazione asincrona non è banale, e non si integra bene con il
> resto del mondo che è sincrono.
>
Purtroppo è quello che si vede/legge in ogni guida :( Basta un niente che
venga usato dalla tua applicazione che faccia operazioni di I/O in modo non
asincrono per annullare gli sforzi fatti.

Un po' è un peccato però, alcuni webserver python sono asincroni ma ahimè
non ha molto senso usare una app senza db, e mi sorprende che nessuno si sia
mai messo seriamente a pensare qualche soluzione. :s

Ciao manlio e grazie mille per la risposta :)
@Lawrence:
Interessante!
Non mi è chiaro però (non ho letto le docs, dopo lo farò)... per eseguire il
codice lato client l'utente deve installare il V8 engine? Io ho provato il
test senza problemi :s
Wiki dice che incrementa le performance js compilandolo... a questo punto
credo venga usato solo lato server mentre la parte lato client sia comune
js, sbaglio?
Grazie comunque per la segnalazione :)

> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>

-- 
Alessandro A.
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20100122/feb4801a/attachment.htm 


Maggiori informazioni sulla lista Python