Wie errno 32 Rohrbruch zu verhindern?
Momentan benutze ich eine app gebaut mit python. Wenn ich es in den PC, es funktioniert ohne Probleme.
Jedoch, wenn ich mich bewege, es in ein Produktions-server. Es zeigt mir die Fehlermeldung angehängt wie folgt:.
Ich habe einige der Forschung getan und ich habe den Grund, dass der end-Benutzer-browser beendet die Verbindung, während der server noch damit beschäftigt sind, Daten zu senden.
Frage ich mich, warum es geschehen ist und was ist die Ursache, die verhindert, dass es richtig läuft in der Produktion server, es funktioniert auf meinem PC. Jede Beratung wird geschätzt
Exception happened during processing of request from ('127.0.0.1', 34226)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 284, in
_handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 310, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.7/SocketServer.py", line 641, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 694, in finish
self.wfile.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
InformationsquelleAutor der Frage SƲmmēr Aƥ | 2012-08-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein server-Prozess hat ein
SIGPIPE
schreiben auf einen socket. Dies geschieht meist, wenn Sie schreiben, um eine socket-vollständig geschlossen auf der anderen (client -) Seite. Dies könnte geschehen, wenn ein client-Programm wartet nicht, bis alle Daten vom server empfangen wird, und schließt einfach eine Buchse (mitclose
- Funktion).In einem C-Programm, das Sie normalerweise versuchen Sie zu ignorieren
SIGPIPE
signal oder die Einstellung ein dummy-signal-handler. In diesem Fall eine einfache Fehler wird zurückgegeben, wenn das schreiben auf einem geschlossenen sockel. In Ihrem Fall ist ein python scheint eine Ausnahme werfen, die behandelt werden kann wie ein vorzeitiges trennen des Clients.InformationsquelleAutor der Antwort Maksim Skurydzin
Es hängt davon ab, wie Sie es getestet, und möglicherweise auch auf Unterschiede in der TCP-stack Implementierung der personal-computer und die server.
Zum Beispiel, wenn Ihr
sendall
immer schließt sofort (oder sehr schnell) auf den personal computer, die Verbindung kann einfach nie gebrochen haben, während Sie senden. Dies ist sehr wahrscheinlich, wenn Ihr browser auf demselben Rechner läuft, (da es kein echtes Netzwerk-Latenz).Im Allgemeinen, brauchen Sie nur den Fall behandeln, wenn ein client die Verbindung trennt, bevor Sie fertig sind, von der Behandlung der Ausnahme.
Denken Sie daran, dass die TCP-Kommunikation sind asynchrone, aber das ist viel mehr offensichtlich, körperlich remote-verbindungen, als auf den lokalen, also Bedingungen wie diese können schwer zu reproduzieren auf einer lokalen Arbeitsstation. Speziell, loopback-verbindungen auf einer einzigen Maschine werden oft fast synchron.
InformationsquelleAutor der Antwort Useless
Die broken pipe-Fehler tritt normalerweise auf, wenn Ihre Anfrage blockiert ist oder zu lange dauert, und nach der Anfrage-Seite timeout, es werde die Verbindung schließen und dann, wenn die Antwort-Seite (server) versucht zum schreiben in die Buchse, wird es werfen eine Leitung ist unterbrochen Fehler.
InformationsquelleAutor der Antwort Aaren Shar
Könnte dies sein, weil Sie zwei Methode für das einfügen von Daten in die Datenbank ein, und diese Ursache, die Website zu verlangsamen.
In der oben genannten Funktion, der Fehler ist, wo Pfeil. Die korrekte Umsetzung ist unter:
InformationsquelleAutor der Antwort Kuldeep K. Rishi