[Python] web: sync vs. async

Alessandro Dentella sandro a e-den.it
Lun 5 Dic 2011 01:11:22 CET


Grazie Daniele per i molti stimoli, ma vorrei capire meglio...

On Fri, Dec 02, 2011 at 08:44:26PM +0000, Daniele Varrazzo wrote:
> >Comincerei a pensare di usare un server non bloccante (e magari le
> >greenlet per avere una API familiare) *solo* se l'applicazione deve
> >scalare su migliaia di richieste ed è fondamentale non sprecare
> >risorse
> >su processi/threads.
> 
> I thread non sono una faccenda di risorse sprecate su Python: sono
> una faccenda di lock contention, e scala maledettamente male: nelle
> poche decine, anche se la macchina permetterebbe ben altro. Nessuno

Se il problema è la lock contention, non vedo come una soluzione asincrona
migliori o scali meglio. Se due chiamate devono contendersi uno stesso dato
dovrò sempre attuare le stesse strategie anche in modalità
asincrona. Sbaglio?

Nel caso per cui ho fatto partire questa discussione poi ho concorrenza
molto limitata (in pratica solo con chiamate generate dalla stessa pagina
web, non da altri utenti)

> dei nostri programmi (sia web che altro, ma con necessità di
> concorrenza) è "sopravvissuto al proprio successo" senza venire
> sbudellato (chi ribasato su greenlet, chi riscritto in erlang...) Il
> sito web di cui ho parlato oggi ha pochi clienti ma è molto
> cpu-intensive e nei giorni di maggiore attività non reggeva 80
> clienti connessi prima di splittarlo.
> 
> Il problema di Alessandro non è quello di scalare: ha verificato che
> la sua macchina è praticamente inattiva per tutto il tempo. Se
> risolve il problema del database che lo blocca dovrebbe stare a
> cavallo. Poi non è che si sia prodigato in dettagli: magari il
> blocco è nel db che offre poche connessioni, non si sa se il db sia
> sulla stessa macchina... un po' di lavoro deve farlo anche lui, non
> possiamo mica debuggare con la telepatia, no? :) Magari quella cosa
> di psycopg + async funziona bene: in fondo quella di twisted pare
> vada. E non lo costringerebbe a scrivere il programma da zero.

La soluzione che hai indicato -il modulo momoko- è interessante ma se non
capisco male mi costringe comunque a riscrivere tutto. Come ho scritto,
l'applicazione al momento usa intensamente SqlAlchemy, non direttamente
psycopg2. Il modulo momoko prevede che uno scriva le SQL dirette, non che
passi da un ORM. Non mi pare [1] che Mike Bayer abbia progetti di
avventurarsi in una versione asincrona di SqlAlchemy.



sandro
*:-)

[1] http://groups.google.com/group/sqlalchemy/browse_thread/thread/c84b33a38540547e





Maggiori informazioni sulla lista Python