problem with xmlrpc server
我使用xmlrpc服务器运行简单的示例,然后按键盘上的ctrl-c:。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | from SimpleXMLRPCServer import SimpleXMLRPCServer from time import sleep import threading,time class Test(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.test1 = 0 def test(self): return self.test1 def run(self): while(1): time.sleep(1) self.test1 = self.test1 + 1 ts = Test() ts.start() server = SimpleXMLRPCServer(("localhost",8888)) server.register_instance(ts) server.serve_forever() |
按下键盘后出错:
1 2 3 | File"/usr/lib/python2.7/SocketServer.py", line 225, in serve_forever r, w, e = select.select([self], [], [], poll_interval) KeyboardInterrupt |
客户端
1 2 3 | from xmlrpclib import ServerProxy r=ServerProxy("http://localhost:8888") print r.test() |
正在等待连接,没有错误或警告。在这种情况下如何断开连接?也许这个例子不正确?
使用方式:
在xmlrpclib.serverproxy超时设置
编辑
这里的答案是不兼容,与Python 2.7。在这一改进的代码(在线测试activepython W7的作品:(2.7)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import xmlrpclib import httplib class TimeoutHTTPConnection(httplib.HTTPConnection): def __init__(self,host,timeout=10): httplib.HTTPConnection.__init__(self,host,timeout=timeout) self.set_debuglevel(99) #self.sock.settimeout(timeout) """ class TimeoutHTTP(httplib.HTTP): _connection_class = TimeoutHTTPConnection def set_timeout(self, timeout): self._conn.timeout = timeout """ class TimeoutTransport(xmlrpclib.Transport): def __init__(self, timeout=10, *l, **kw): xmlrpclib.Transport.__init__(self,*l,**kw) self.timeout=timeout def make_connection(self, host): conn = TimeoutHTTPConnection(host,self.timeout) return conn class TimeoutServerProxy(xmlrpclib.ServerProxy): def __init__(self,uri,timeout=10,*l,**kw): kw['transport']=TimeoutTransport(timeout=timeout, use_datetime=kw.get('use_datetime',0)) xmlrpclib.ServerProxy.__init__(self,uri,*l,**kw) if __name__ =="__main__": s=TimeoutServerProxy('http://127.0.0.1:8888',timeout=2) print s.test() |
让你的
1 2 3 | ts = Test() ts.setDaemon(True) ts.start() |
"问题是,你为什么要注册的XML - RPC的一个线程的句柄。