Я хотел маленькую, чистую, но также явную версию, поэтому, основываясь на всех других ответах, вот что я придумал:
import xmlrpclib
class TimeoutTransport(xmlrpclib.Transport):
def __init__(self, timeout, use_datetime=0):
self.timeout = timeout
# xmlrpclib uses old-style classes so we cannot use super()
xmlrpclib.Transport.__init__(self, use_datetime)
def make_connection(self, host):
connection = xmlrpclib.Transport.make_connection(self, host)
connection.timeout = self.timeout
return connection
class TimeoutServerProxy(xmlrpclib.ServerProxy):
def __init__(self, uri, timeout=10, transport=None, encoding=None, verbose=0, allow_none=0, use_datetime=0):
t = TimeoutTransport(timeout)
xmlrpclib.ServerProxy.__init__(self, uri, t, encoding, verbose, allow_none, use_datetime)
proxy = TimeoutServerProxy(some_url)
Сначала я не осознавал, что xmlrpclib
имеет классы в старом стиле, поэтому я счел его полезным с комментарием об этом, иначе все должно быть довольно понятно
Я не понимаю, почему httplib.HTTP
также должно быть подклассом, если кто-то может просветить меня об этом, пожалуйста, сделайте. Вышеуказанное решение опробовано и работает.