python xmlrpc 服务端返回慢的解决方案

来源:互联网 发布:淘宝官网购物 编辑:程序博客网 时间:2024/05/22 13:42

       最近把一套项目植到另外一套环境中,发觉某个xmlrpc 服务端的返回非常慢,但是把服务器改为公网ip后又没有问题。

      根据这个问题我尝试着问了一下google “xmlrpc response slow”  , 结果还真有人遇到相同的问题,说是因为服务器没有配置host的原因,因为每次返回的时候BaseHTTPRequestHandler 都会调用log_message 方法记录一些日志信息,而log_message方法需要知道请求的host 。 问题就出在这里,当没有host的时候程序会调用_socket 的gethostname()方法,而服务器上并没有配置驿应的host。

     

      我想大家还是比较关心如果解决这个问题

      方法一: 在服务器端添加host 映射,也就是修改hosts文件。 

      方法二: 修改代码。下面有两段示例代码,一段是未修改之前返回慢的,一段是修改后问题解决了的。

     

import SimpleXMLRPCServerclass FuncGroup:    """Just hold the funcs to be used in web service"""    def hi(self,val):        return "hi there"#create server and start itserver_address = ('localhost',8000) # (address, port)server = SimpleXMLRPCServer.SimpleXMLRPCServer(server_address)server.register_instance(FuncGroup()) #reg. functions/class instanceserver.serve_forever()

修改后

import SimpleXMLRPCServer#new codeimport BaseHTTPServerdef not_insane_address_string(self):    host, port = self.client_address[:2]    return '%s (no getfqdn)' % host #这里省去了获取host的方法BaseHTTPServer.BaseHTTPRequestHandler.address_string =  not_insane_address_string#end new codeclass FuncGroup:    """Just hold the funcs to be used in web service"""    def hi(self,val):        return "hi there"#create server and start itserver_address = ('localhost',8000) # (address, port)server = SimpleXMLRPCServer.SimpleXMLRPCServer(server_address)server.register_instance(FuncGroup()) #reg. functions/class instanceserver.serve_forever()

文章参考:http://www.answermysearches.com/xmlrpc-server-slow-in-python-how-to-fix/2140/


原创粉丝点击