次の行に沿って書かれた単純な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 問題の原因を誰か教えてもらえますか?