SƲm*_* Aƥ 114 python broken-pipe
目前我正在使用python内置的应用程序.当我在个人计算机上运行时,它可以正常工作.
但是,当我将它移动到生产服务器时.它不断向我显示如下错误:
我做了一些研究,我得到了最终用户浏览器在服务器仍在忙于发送数据时停止连接的原因.
我想知道它为什么会发生以及阻止它在生产服务器中正常运行的根本原因是什么,而它可以在我的个人计算机上运行.任何建议表示赞赏
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
Run Code Online (Sandbox Code Playgroud)
Mak*_*zin 80
您的服务器进程已收到SIGPIPE
对套接字的写入.当您在另一个(客户端)端写入完全关闭的套接字时,通常会发生这种情况.当客户端程序不等到收到服务器的所有数据并且只是关闭套接字(使用close
函数)时,可能会发生这种情况.
在C程序中,您通常会尝试设置忽略SIGPIPE
信号或为其设置虚拟信号处理程序.在这种情况下,写入已关闭的套接字时将返回一个简单的错误.在你的情况下,python似乎抛出一个异常,可以作为客户端的过早断开来处理.
这取决于您如何测试它,以及可能取决于个人计算机和服务器的TCP堆栈实现的差异.
例如,如果您sendall
总是立即(或非常快速地)在个人计算机上完成,则连接在发送期间可能永远不会中断.如果您的浏览器在同一台计算机上运行(因为没有真正的网络延迟),这很有可能.
通常,您只需要通过处理异常来处理客户端在完成之前断开连接的情况.
请记住,TCP通信是异步的,但这在物理远程连接上比在本地远程连接上要明显得多,因此这样的条件很难在本地工作站上重现.具体而言,单台机器上的环回连接通常几乎是同步的.
归档时间: |
|
查看次数: |
239546 次 |
最近记录: |