首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xmlrpclib客户端请求超时

xmlrpclib客户端请求超时
EN

Stack Overflow用户
提问于 2010-03-11 22:40:35
回答 5查看 7.3K关注 0票数 4

我正在使用Python的xmlrpclib向xml-rpc服务发出请求。

有没有办法设置客户端超时,这样当服务器不可用时,我的请求就不会永远挂起?

我知道我可以使用socket.setdefaulttimeout()全局设置套接字超时,但这并不可取。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-11 23:37:49

干净的方法是定义和使用自定义传输,例如:!这只适用于python2.7!

代码语言:javascript
复制
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中有一个定义和使用自定义传输的示例,尽管它将其用于不同的目的(通过代理访问,而不是设置超时),但此代码基本上是受该示例的启发。

票数 12
EN

Stack Overflow用户

发布于 2011-05-16 16:42:05

doh,要在python2.6+中执行此操作,请执行以下操作:

代码语言:javascript
复制
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
票数 8
EN

Stack Overflow用户

发布于 2011-06-29 00:40:19

为什么不呢:

代码语言:javascript
复制
class TimeoutTransport(xmlrpclib.Transport):

def setTimeout(self, timeout):
    self._timeout = timeout

def make_connection(self, host):
    return httplib.HTTPConnection(host, timeout=self._timeout)

毕竟,HTTPHTTPS看起来只不过是旧版本的兼容类。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2425799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档