我正在使用Python的xmlrpclib向xml-rpc服务发出请求。
有没有办法设置客户端超时,这样当服务器不可用时,我的请求就不会永远挂起?
我知道我可以使用socket.setdefaulttimeout()全局设置套接字超时,但这并不可取。
发布于 2010-03-11 23:37:49
干净的方法是定义和使用自定义传输,例如:!这只适用于python2.7!
import xmlrpclib, httplib
class TimeoutTransport(xmlrpclib.Transport):
timeout = 10.0
def set_timeout(self, timeout):
self.timeout = timeout
def make_connection(self, host):
h = httplib.HTTPConnection(host, timeout=self.timeout)
return h
t = TimeoutTransport()
t.set_timeout(20.0)
server = xmlrpclib.Server('http://time.xmlrpc.com/RPC2', transport=t)在the docs中有一个定义和使用自定义传输的示例,尽管它将其用于不同的目的(通过代理访问,而不是设置超时),但此代码基本上是受该示例的启发。
发布于 2011-05-16 16:42:05
doh,要在python2.6+中执行此操作,请执行以下操作:
class HTTP_with_timeout(httplib.HTTP):
def __init__(self, host='', port=None, strict=None, timeout=5.0):
if port == 0: port = None
self._setup(self._connection_class(host, port, strict, timeout=timeout))
def getresponse(self, *args, **kw):
return self._conn.getresponse(*args, **kw)
class TimeoutTransport(xmlrpclib.Transport):
timeout = 10.0
def set_timeout(self, timeout):
self.timeout = timeout
def make_connection(self, host):
h = HTTP_with_timeout(host, timeout=self.timeout)
return h发布于 2011-06-29 00:40:19
为什么不呢:
class TimeoutTransport(xmlrpclib.Transport):
def setTimeout(self, timeout):
self._timeout = timeout
def make_connection(self, host):
return httplib.HTTPConnection(host, timeout=self._timeout)毕竟,HTTP和HTTPS看起来只不过是旧版本的兼容类。
https://stackoverflow.com/questions/2425799
复制相似问题