在我的一个程序中,我需要在两个进程之间创建连接。我按以下方式使用了 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/