On Fri, 02 Dec 2011 20:18:18 +0100, Manlio Perillo wrote:

IMHO, nel caso in questione, è meglio cambiare web server usando ad
esempio Apache + mod_wsgi.

Chiedi ad AD se ha voglia di riscrivere tutto il programma...

In questo caso hai un pool di processi che gestiscono le richieste e
dovresti essere a posto (ma hai anche la possibilità di usare i thread,
e con psycopg2 può essere una alternativa).

Stai sempre parlando di scrivere un programma da zero con certe specifiche, tipo non avere stato al di fuori del database, che non è detto siano quelle di Alessandro (lui ha detto "Ogni chiamata dallo stesso client cambia dati nella sessione che devono quindi essere sincronizzati fra una chiamata e l'altra": non so se intende stato in memoria o nel db; il process pooling dell'applicazione implica zero stato per client in memoria)

Scusa, ma tu veramente ti sentiresti di consigliare una soluzione web python basata su thread e di sostenere che questa possa scalare? Non parlo di milioni di utenti, parlo di centinaia. Veramente ritieni che buttare thread in python sia una soluzione buona quanto usare metodi asincroni nei diversi modi possibili (greenlet, twisted, yield-based ecc).

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 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.

Ciao!


--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a