On Mon, Dec 30, 2013 at 05:26:57PM +0100, Roberto De Ioris wrote: > > Mi pare di capire che la soluzione della listen queue che mi hai indicato > > risolverebbe questo problema. > > > > > server = HTTPServer(app) > server.bind(post, backlog=1) > > (prova anche con zero, su alcuni kernel funziona, anche se non ricordo se > e' per quelli piu' recenti o quelli piu' vecchi)
Purtroppo questa strada non ha funzionato. Ricordo che il probelma che cerchiamo di risolvere è che quando viene interrotto una chiamata "lunga", nginx libera quella connessione e quindi diritta verso quel processo la prossima chiamata, ma il processo di fatto è occupato. La nostra simulazione è stata fatta con 2 funzioni: is_up e blocking che usa time.sleep() class IsUp(tornado.web.RequestHandler): def get(self): self.write("Is Up Porta %d" ...) self.finish() class Blocking(tornado.web.RequestHandler): def get(self, numero=10): time.sleep(int(numero)) self.write("Bloccato Porta %s\n" % options.port) self.finish() la chiamata usando 'wget -q -O - http://ngtest/blocking/30/' ed interrompendolo con Control-c. In un terminale separato in ciclo di 'wget -q -O - http://ngtest/is_up' Il ciclo si blocca nel momento della interruzione e riprende solo quando termita il tempo (e quindi il processo si libera) > >> L'approccio migliore (o meglio diciamo quello risolutivo) e' che i > >> processi usino lo stesso socket, puoi provare il plugin tornado di > >> uWSGI: > >> > >> http://uwsgi-docs.readthedocs.org/en/latest/Tornado.html Siamo passato quindi a leggere la documentazione per fare questa prova ma ammetto che ho qualche dubbio. Dimmi per cortesia se scrivo inesattezze... Credo di capire che vengono descritte più opzioni di configurazione: con i greenlet ed una programmazione asincrona o con processi tornado indipendenti. Considerando che il tutto nasce proprio dal fatto che abbiamo probelmi nelle funzioni che NON sono state scritte in modo asincrono quello che vogliamo è di usare la configurazione descritta in fondo "Binding and listening with Tornado". Mi pare di capire che in questa ipotesi vengano fatti partire processi differenti e per ogni processo venga eseguito "start_the_tornado_servers", finiremmo quindi -come ora- ad avere svariati server tornado in ascolto ma con la differenza che il routing fra un server e l'altro sarebbe gestito da uwsgi, corretto? è in questa situazione che uwsgi usa lo stesso socket per tutti i processi? *Se* fin qui e` corretto mi resta poi da capire come mai 'start_the_tornado_servers' lanci application e non 't_application' e come construire la application che viene chiamata da uwsgi. Nell'esempio i 3 puntini presuppongono un lettore meno confuso del sottoscritto... Lascio poi al mio collega un'altra domanda su un probelma di segfault... grazie per l'attenzione sandro *:-) _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python