1

我有一个简单的 xmlrpc 服务器,它是按照以下方式编写的

server = SimpleXMLRPCServer(('127.0.0.1', 8000),allow_none=True)
server.register_function(self.fetch_buyer_data,'"fetch_buyer_data")
...
...
server.serve_forever()

这不是完整的代码,但你明白了(希望如此)!

在同一个服务器脚本中,我有一个函数可以读取 sqlite3 数据库的内容并返回所有数据。像这样的东西:

def fetch_buyer_data(self, projectname):
    conn = sqlite3.connect(...)
    # read data from sqlite3 database and save it into list
    conn.close()
    return datalist

我使用客户端的以下代码来访问上述功能。

proxy = xmlrpclib.ServerProxy("http://%s:%s/" %(hostip,hostport),allow_none=True)
data = proxy.fetch_buyer_data(SELECTED_PROJECT)

一切都很好,直到 sqlite3 数据库中的数据变大(不是很大,但像几兆字节!),我不断收到以下错误消息!

Traceback (most recent call last):
  File "C:\Custom\src\Client\client.py", line 178, in show_user_page
    userpage = UserPage()
  File "C:\Custom\src\Client\client.py", line 2371, in __init__
    self.update_buyer_table()
  File "C:\Custom\src\Client\client.py", line 6106, in update_buyer_table
    data = proxy.fetch_buyer_data(SELECTED_PROJECT)
  File "C:\Python27\Lib\xmlrpclib.py", line 1224, in __call__
    return self.__send(self.__name, args)
  File "C:\Python27\Lib\xmlrpclib.py", line 1578, in __request
    verbose=self.__verbose
  File "C:\Python27\Lib\xmlrpclib.py", line 1264, in request
    return self.single_request(host, handler, request_body, verbose)
  File "C:\Python27\Lib\xmlrpclib.py", line 1297, in single_request
    return self.parse_response(response)
  File "C:\Python27\Lib\xmlrpclib.py", line 1453, in parse_response
    stream = GzipDecodedResponse(response)
  File "C:\Python27\Lib\xmlrpclib.py", line 1204, in __init__
    self.stringio = StringIO.StringIO(response.read())
  File "C:\Python27\Lib\httplib.py", line 548, in read
    s = self._safe_read(self.length)
  File "C:\Python27\Lib\httplib.py", line 649, in _safe_read
    raise IncompleteRead(''.join(s), amt)
httplib.IncompleteRead: IncompleteRead(8031 bytes read, 1732 more expected)

注意:我已经检查了服务器上其他注册的功能是否正常工作。所以,我可以排除连接问题(ip、端口等)。

是什么导致此错误消息?我该如何克服这个问题?

我在 windows xp sp3 上使用 python 2.7。

更新 1:

我发现这并不完全取决于数据库的大小。有时它给我错误信息,有时它没有。谁能告诉我是什么导致了这个 IncompleteRead 问题?

4

0 回答 0