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

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

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

最佳答案

干净的方法是定义和使用自定义传输,例如:
!这仅适用于 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 中定义和使用自定义传输的示例,尽管它用于不同的目的(通过代理访问,而不是设置超时),但这段代码基本上受该示例的启发。

关于python - xmlrpclib 客户端请求超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2425799/

10-15 01:45