Альтернативная реализация, совместимая с 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
.
person
purg
schedule
06.06.2013