Set timeout for xmlrpclib.ServerProxy

前端 未结 9 1694
轮回少年
轮回少年 2020-12-29 22:33

I am using xmlrpclib.ServerProxy to make RPC calls to a remote server. If there is not a network connection to the server it takes the default 10 seconds to return a socket.

9条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-29 23:25

    The following example works with Python 2.7.4.

    import xmlrpclib
    from xmlrpclib import *
    import httplib
    
    def Server(url, *args, **kwargs):
        t = TimeoutTransport(kwargs.get('timeout', 20))
        if 'timeout' in kwargs:
           del kwargs['timeout']
        kwargs['transport'] = t
        server = xmlrpclib.Server(url, *args, **kwargs)
        return server
    
    TimeoutServerProxy = Server
    
    class TimeoutTransport(xmlrpclib.Transport):
    
        def __init__(self, timeout, use_datetime=0):
            self.timeout = timeout
            return xmlrpclib.Transport.__init__(self, use_datetime)
    
        def make_connection(self, host):
            conn = xmlrpclib.Transport.make_connection(self, host)
            conn.timeout = self.timeout
            return connrpclib.Server(url, *args, **kwargs)
    

提交回复
热议问题