win64上的python 3.2.0,大负载的xml rpc失败

win64上的python 3.2.0,大负载的xml rpc失败,python,windows-7,xml-rpc,large-data,Python,Windows 7,Xml Rpc,Large Data,我有一个python对象,其方法目前正在使用标准的xmlrpc.server.SimpleXMLRPCServer通过XML-RPC公开(使用ThreadingMixIn,但这不应该相关) 服务器和客户端都在Win64上运行。某些RPC方法将信息表从数据库返回给客户端。我发现即使是少量的数据块也会压倒操作系统,我会遇到这样的错误: Traceback (most recent call last): File "C:\Python32\lib\wsgiref\handlers.py", li

我有一个python对象,其方法目前正在使用标准的xmlrpc.server.SimpleXMLRPCServer通过XML-RPC公开(使用ThreadingMixIn,但这不应该相关)

服务器和客户端都在Win64上运行。某些RPC方法将信息表从数据库返回给客户端。我发现即使是少量的数据块也会压倒操作系统,我会遇到这样的错误:

Traceback (most recent call last): File "C:\Python32\lib\wsgiref\handlers.py", line 137, in run self.result = application(self.environ, self.start_response) File "U:\Me\src\application\my_xmlrpc_client.py", line 1510, in __call__ body = method(environ, start_response) File "U:\Me\src\application\my_xmlrpc_client.py", line 305, in q_root rows = proxy.return_table() File "C:\Python32\lib\xmlrpc\client.py", line 1095, in __call__ return self.__send(self.__name, args) File "C:\Python32\lib\xmlrpc\client.py", line 1423, in __request verbose=self.__verbose File "C:\Python32\lib\xmlrpc\client.py", line 1136, in request return self.single_request(host, handler, request_body, verbose) File "C:\Python32\lib\xmlrpc\client.py", line 1151, in single_request return self.parse_response(resp) File "C:\Python32\lib\xmlrpc\client.py", line 1323, in parse_response return u.close() File "C:\Python32\lib\xmlrpc\client.py", line 667, in close raise Fault(**self._stack[0]) xmlrpc.client.Fault: :[Errno 12] Not enough space"> LIBRA.rsvfx.com - - [19/May/2011 15:58:09] "GET / HTTP/1.1" 500 59 回溯(最近一次呼叫最后一次): 文件“C:\Python32\lib\wsgiref\handlers.py”,第137行,正在运行 self.result=应用程序(self.environ、self.start\u响应) 文件“U:\Me\src\application\my\U xmlrpc\U client.py”,第1510行,在调用中__ 主体=方法(环境、启动和响应) 文件“U:\Me\src\application\my_xmlrpc_client.py”,第305行,在q_根目录中 rows=proxy.return\u table() 文件“C:\Python32\lib\xmlrpc\client.py”,第1095行,在调用中__ 返回self.\u发送(self.\u名称,args) 请求中第1423行的文件“C:\Python32\lib\xmlrpc\client.py” verbose=self.\uuu verbose 请求中第1136行的文件“C:\Python32\lib\xmlrpc\client.py” 返回self.single\u请求(主机、处理程序、请求体、详细) 文件“C:\Python32\lib\xmlrpc\client.py”,第1151行,在单次请求中 返回self.parse_响应(resp) 文件“C:\Python32\lib\xmlrpc\client.py”,第1323行,在parse_响应中 返回u.close() 文件“C:\Python32\lib\xmlrpc\client.py”,第667行,关闭 raise故障(**self.\u堆栈[0]) xmlrpc.client.Fault::[Errno 12]空间不足“> LIBRA.rsvfx.com---[19/May/2011 15:58:09]“GET/HTTP/1.1”500 59 对Errno 12问题的一些研究表明,底层的MS OS调用存在一些问题,而不是python本身:

我不是一个非常有经验的XML-RPC开发人员;但是,在交付大的有效负载时,是否应该遵循一些标准约定,以产生更多、更小的写入(而不是更少、更大的写入)

请记住,我问的是缓冲区溢出问题;我不想争论为什么我要使用XML-RPC而不是滚动我自己的RESTful接口……我必须为这个问题修补我的WSGI应用程序-发送小1k块而不是更大的块。我不确定如何修补XML-RPC应用程序

--编辑--

根据要求,以下是再现问题的代码示例:

import xmlrpc.server class RPCApp : def get_page(self): return ["data" * 64 for i in range(0,1024)] if __name__ == '__main__' : # important to use this block, for processes to spawn correctly server = xmlrpc.server.SimpleXMLRPCServer(('127.0.0.1',8989), allow_none=True, logRequests=False) server.register_instance(RPCApp()) server.serve_forever() 导入xmlrpc.server 类别RPCApp: def get_页面(自我): 返回[“数据”*64表示范围内的i(01024)] 如果_name _=='_main __':#重要的是使用此块,以便正确生成进程 server=xmlrpc.server.SimpleXMLRPCServer(('127.0.0.1',8989),allow_none=True,logRequests=False) server.register\u实例(RPCApp()) 服务器。永远为您服务() 和客户端代码:

import xmlrpc.client proxy = xmlrpc.client.ServerProxy('http://127.0.0.1:8989', allow_none=True) print(proxy.get_page()) 导入xmlrpc.client proxy=xmlrpc.client.ServerProxy('http://127.0.0.1:8989,允许_none=True) 打印(代理。获取页面()) 如果您在服务器中操纵页面使其变小,那么代码就会正常工作。实际上,会引发异常

--编辑--


似乎在python 3.2.1rc1中得到了解决。看来我们必须升级我们的安装…

您链接的python缺陷仅在打印到Windows终端/控制台时才显现出来。我认为这与您在此处看到的内容无关。此外,您可以为我们展示的任何最小代码示例/craft都将可靠地复制或复制恶魔解决这个问题?我在7月10日发布的Python 3.2.1中看到了同样的问题。@thechao:奇怪!我们使用的是Python 3.2.1(默认值,2011年7月10日,20:02:51)[MSC v.1500 64位(AMD64)]在win32上,再也看不到错误了。@115B:我们的问题是,在使用“with”语句的文件上,utf-8编码/解码与二进制BLOB和“b”模式不正确匹配。一旦我们解决了所有问题,我们就不再有问题了。您链接的Python缺陷仅在打印到Windows终端/控制台时才显现出来。我不认为是这样与您在此处看到的内容相关。此外,您可以为我们展示/制作任何能够可靠复制或演示此内容的最小代码示例吗?我在7月10日发布的Python 3.2.1中看到了相同的问题。@Chao:奇怪!我们使用的是Python 3.2.1(默认值,2011年7月10日,20:02:51)[MSC v.1500 64位(AMD64)]在win32上,我们再也看不到错误了。@115B:我们的问题是在使用“with”语句的文件上,utf-8编码/解码与二进制BLOB和“b”模式不正确匹配。一旦我们解决了所有问题,我们就不再有问题了。