Sto usando pallone per lo sviluppo, non la produzione, e ho una visione per una richiesta ajax, qualcosa di simile:come fare un'eccezione per errori di pipe rotte sul pallone, quando il client si disconnette prematuramente?
@application.route('/xyz/<var>/', methods=['GET'])
def getAjax(var):
...
return render_template(...)
sto utilizzando anche threaded=true
per lo sviluppo. Ogni volta che io chiamo la richiesta Ajax e poi basta chiudere la scheda che lo ha richiesto ottengo un errore:
Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 593, in process_request_thread
self.finish_request(request, client_address) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 651, in __init__ 2015-07-07 09:46:09,430 127.0.0.1 - - [07/Jul/2015 09:46:09] "GET /xyz/List/ HTTP/1.1" 200 -
self.finish() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 710, in finish
self.wfile.close() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 279, in close
self.flush() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size]) error: [Errno 32] Broken pipe
Posso avere un blocco try: except
per catturare questa eccezione? Ho provato a mettere tutto il contenuto della funzione getAjax
su:
try:
...
except socket.error, e:
logging.warn("socket error " + e)
Ma non sta funzionando, in cui devo fare questo? o come?
EDIT: aggiungendo la chiamata AJAX
$.ajax({
type: 'GET',
url: '/xyz/' + var + '/',
data: {
...
},
timeout: 2000,
success: function(data) {
...
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
...
}
});
Avete controllato [questa risposta] (http://stackoverflow.com/questions/22560259/error-errno-32-broken-pipe)? E considera di pubblicare il tuo codice Ajax se vuoi più feedback. – doru
Bene, la risposta selezionata non sembra darmi ulteriori informazioni, poiché so già che l'errore è causato dal fatto che il cliente è assente per ricevere la risposta. Ma non sono sicuro del significato del poster con la modifica: dicendo che non ha inviato la risposta di Python. – tiagosilva
Hai provato ad aumentare il 'timeout' a 20000, ad esempio? – doru