multiprocessing.connection.Client连接重试时间

时间:2015-12-30 08:22:29

标签: python python-2.7 multiprocessing

在我的一个程序中,我需要在两个进程之间创建连接。我以下列方式使用multiprocessing.connection.Client类:

address = ('192.168.1.128', 6502)
self.conn = multiprocessing.connection.Client(address)

我的问题是:如何在内部处理连接重试?如果无法建立连接,我需要处理它还是模块自己处理它?如果是这样,怎么样?

预先感谢您的回复!

1 个答案:

答案 0 :(得分:1)

在代码中挖掘一下,我发现multiprocessing.connection.Client返回SocketClient连接。在SocketClient函数中定义了20秒超时。如果在10毫秒后未在此超时内建立连接,则进行另一次尝试。这将一直持续到无限:

CONNECTION_TIMEOUT = 20.    

def _init_timeout(timeout=CONNECTION_TIMEOUT):
    return time.time() + timeout

def _check_timeout(t):
    return time.time() > t


def SocketClient(address):
    '''
    Return a connection object connected to the socket given by `address`
    '''
    family = address_type(address)
    s = socket.socket( getattr(socket, family) )
    t = _init_timeout()

    while 1:
        try:
            s.connect(address)
        except socket.error, e:
            if e.args[0] != errno.ECONNREFUSED or _check_timeout(t):
                debug('failed to connect to address %s', address)
                raise
            time.sleep(0.01)
        else:
            break
    else:
        raise

    fd = duplicate(s.fileno())
    conn = _multiprocessing.Connection(fd)
    s.close()
    return conn

所以我相信我的问题的答案是每次尝试连接时都会启动20秒的超时。如果超过10毫秒后超时,则再次尝试。