Python XMLRPC 超时错误

0 投票
1 回答
2578 浏览
提问于 2025-04-17 09:50

我正在使用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吗?

如果你预期服务器偶尔会需要一些时间来处理请求,那么你可以通过上面的方式设置一个更长的超时时间。

希望这对你有帮助。

撰写回答