Альтернативная реализация, которая будет совместима с python 2.7, будет выглядеть следующим образом (с комментарием, содержащим то, что вам нужно, если вы используете python 2.6):
import socket
import xmlrpclib
class TimeoutTransport (xmlrpclib.Transport):
"""
Custom XML-RPC transport class for HTTP connections, allowing a timeout in
the base connection.
"""
def __init__(self, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, use_datetime=0):
xmlrpclib.Transport.__init__(self, use_datetime)
self._timeout = timeout
def make_connection(self, host):
# If using python 2.6, since that implementation normally returns the
# HTTP compatibility class, which doesn't have a timeout feature.
#import httplib
#host, extra_headers, x509 = self.get_host_info(host)
#return httplib.HTTPConnection(host, timeout=self._timeout)
conn = xmlrpclib.Transport.make_connection(self, host)
conn.timeout = self._timeout
return conn
# Example use
t = TimeoutTransport(timeout=10)
server = xmlrpclib.ServerProxy('http://time.xmlrpc.com/RPC2', transport=t)
Использование супер-метода позволит базовой реализации 2.7 поддерживать свою функцию поддержки активности HTTP / 1.1, которую он определяет.
Следует отметить, что если вы пытаетесь использовать XML-RPC через соединение / адрес https, замените xmlrpc.SafeTransport
ссылки на xmlrpc.Transport
и, если вы используете реализацию 2.6, используйте httplib.HTTPSConnection
.