我正在使用 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/