-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Il 02/12/2011 19:31, Daniele Varrazzo ha scritto: > [...] > >> Credo che dovrei venirne fuori o rendendo asincrona la chiamata via >> SqlAlchemy (come?) o aumentando i thread della risposta. Sbaglio? > > Il problema è a valle di sqlalchemy: la dbapi è bloccante: cur.execute() > blocca finchè non ottieni una risposta. > > Le soluzioni sono 2: quella twisted è di cambiare l'interfaccia della > dbapi, inventarsi la ADBAPI, dove passi un callback quando verrà > eseguito. tx_postgres wrappa psycopg e usa questa soluzione. Ovviamente > devi riscrivere tutto il mondo, perché niente deve essere bloccante. > > Ma la soluzione più figa (sono di parte, me la sono inventata io) è > quella di aggiungere un hook a psycopg, passargli un callback che viene > invocato quando la chiamata bloccherà. Con questo callback psycopg > "chiede di essere bloccato" passando la palla allo scheduler dei > greenlet che può schedulare un thread switch.
IMHO, nel caso in questione, è meglio cambiare web server usando ad esempio Apache + mod_wsgi. 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). 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. Personalmente, per applicazioni di cui non mi preoccupa l'elevata concorrenza, utilizzo nginx + il mio ngx_http_wsgi_module, in cui imposto il numero di worker di Nginx pari a 2 x ncpu. Ciascun worker serve una sola request alla volta. Il consumo di CPU e memoria in questo caso è minimo, e mi posso aspettare una certa robustezza di tutta la baracca. > [...] Ciao Manlio -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk7ZJHoACgkQscQJ24LbaUQ02wCgiKqGCZBWAi5ZPhuHYCg2SAau 9FIAoJDYdYKrnV64DXdHVaB8FD7wYnZZ =5IJb -----END PGP SIGNATURE----- _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python