Python XMLRPC 超时错误
我正在使用xmlrpc与本地服务器联系。在客户端,有时候会出现以下的socket超时错误,这个错误并不是每次都会发生。
为什么会出现这个问题?socket超时的原因可能是什么呢?
<class 'socket.timeout'>: timed out
args = ('timed out',)
errno = None
filename = None
message = 'timed out'
strerror = None
服务器端的错误追踪信息如下:
Exception happened during processing of request from ('127.0.0.1', 34855)
Traceback (most recent call last):
File "/usr/lib/python2.4/SocketServer.py", line 222, in handle_request
self.process_request(request, client_address)
File "/usr/lib/python2.4/SocketServer.py", line 241, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python2.4/SocketServer.py", line 254, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.4/SocketServer.py", line 521, in __init__
self.handle()
File "/usr/lib/python2.4/BaseHTTPServer.py", line 314, in handle
self.handle_one_request()
File "/usr/lib/python2.4/BaseHTTPServer.py", line 308, in handle_one_request
method()
File "/usr/lib/python2.4/SimpleXMLRPCServer.py", line 441, in do_POST
self.send_response(200)
File "/usr/lib/python2.4/BaseHTTPServer.py", line 367, in send_response
self.send_header('Server', self.version_string())
File "/usr/lib/python2.4/BaseHTTPServer.py", line 373, in send_header
self.wfile.write("%s: %s\r\n" % (keyword, value))
File "/usr/lib/python2.4/socket.py", line 256, in write
self.flush()
File "/usr/lib/python2.4/socket.py", line 243, in flush
self._sock.sendall(buffer)
error: (32, 'Broken pipe')
我把服务器关掉然后重新启动了,现在一切正常。
这可能是什么原因呢?
昨天晚上我机器的内存满了,今天早上又恢复正常了。
这个错误会不会是因为某些进程的切换导致的呢?
1 个回答
1
看起来客户端的连接在等服务器回复的时候超时了。是不是有可能你的服务器有时候反应比较慢呢?另外,如果服务器让机器使用了交换空间,那也会导致速度变慢,从而可能出现超时的情况。
如果我没记错的话,Python中的xmlrpc默认是没有设置连接超时的。你在代码的某个地方有用到socket.setdefaulttimeout吗?
如果你预期服务器偶尔会需要一些时间来处理请求,那么你可以通过上面的方式设置一个更长的超时时间。
希望这对你有帮助。