Saat ini saya menggunakan aplikasi bawaan python. Ketika saya menjalankannya di komputer pribadi, ini bekerja tanpa masalah.
Namun, ketika saya memindahkannya ke server produksi. Itu terus menunjukkan kepada saya kesalahan yang dilampirkan seperti di bawah ini:.
Saya telah melakukan beberapa penelitian dan saya mendapat alasan bahwa browser pengguna akhir menghentikan koneksi saat server masih sibuk mengirim data.
Saya bertanya-tanya mengapa itu terjadi dan apa akar penyebab yang mencegahnya berjalan dengan baik di server produksi, sementara itu berfungsi di komputer pribadi saya. Setiap saran dihargai
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
python
broken-pipe
SƲmmēr Aƥ
sumber
sumber
Jawaban:
Proses server Anda telah menerima
SIGPIPE
tulisan ke soket. Ini biasanya terjadi ketika Anda menulis ke soket yang tertutup sepenuhnya di sisi (klien) lainnya. Ini mungkin terjadi ketika program klien tidak menunggu sampai semua data dari server diterima dan hanya menutup soket (menggunakanclose
fungsi).Dalam program C Anda biasanya mencoba mengatur untuk mengabaikan
SIGPIPE
sinyal atau mengatur penangan sinyal tiruan untuk itu. Dalam hal ini kesalahan sederhana akan dikembalikan saat menulis ke soket tertutup. Dalam kasus Anda, python tampaknya melempar pengecualian yang dapat ditangani sebagai pemutusan hubungan klien secara prematur.sumber
Itu tergantung pada bagaimana Anda mengujinya, dan mungkin pada perbedaan dalam implementasi tumpukan TCP komputer pribadi dan server.
Misalnya, jika Anda
sendall
selalu menyelesaikan dengan segera (atau sangat cepat) di komputer pribadi, koneksi mungkin tidak pernah putus selama pengiriman. Ini sangat mungkin terjadi jika browser Anda berjalan di komputer yang sama (karena tidak ada latensi jaringan yang sebenarnya).Secara umum, Anda hanya perlu menangani kasus di mana klien terputus sebelum Anda selesai, dengan menangani pengecualian.
Ingatlah bahwa komunikasi TCP bersifat asinkron, tetapi ini jauh lebih jelas pada koneksi jarak jauh secara fisik daripada pada koneksi lokal, jadi kondisi seperti ini mungkin sulit untuk mereproduksi pada workstation lokal. Secara khusus, koneksi loopback pada satu mesin seringkali hampir sinkron.
sumber
try ... except
Kesalahan pipa rusak biasanya terjadi jika permintaan Anda diblokir atau memakan waktu terlalu lama dan setelah waktu tunggu sisi permintaan, itu akan menutup koneksi dan kemudian, ketika sisi-tanggapan (server) mencoba untuk menulis ke soket, itu akan melempar kesalahan pipa rusak.
sumber
Ini mungkin karena Anda menggunakan dua metode untuk memasukkan data ke dalam database dan ini menyebabkan situs menjadi lambat.
Dalam fungsi di atas, kesalahannya adalah di mana panah menunjuk. Implementasi yang benar ada di bawah ini:
sumber