python - multiprocessing.connection.Client 连接重试时间

标签 python python-2.7 multiprocessing

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

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

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

预先感谢您的回复!

最佳答案

深入研究代码,我发现 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 毫秒后过去,则会进行另一次尝试。

关于python - multiprocessing.connection.Client 连接重试时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34525608/

相关文章:

python - 如何将关键字列表传递给 pathos.multiprocessing?

python - 使用 multiprocessing.Managers 构建一个简单的远程调度程序

python - matplotlib.rc() 中参数 "group"的元素

python - 用python2.7阅读docx

Python:选择落在两条任意曲线内的点

python - 关于从 PyCharm 安装 SciPy

Python 嵌套 for 循环将数组元素中的字符串与文件匹配

python - 多进程读取文件

Python:从多个字典中添加值并合并唯一键

c++ - 为什么 Armadillo 的 SVD 结果与 NumPy 不同?