在我的一个程序中,我需要在两个进程之间创建连接。我以下列方式使用multiprocessing.connection.Client
类:
address = ('192.168.1.128', 6502)
self.conn = multiprocessing.connection.Client(address)
我的问题是:如何在内部处理连接重试?如果无法建立连接,我需要处理它还是模块自己处理它?如果是这样,怎么样?
预先感谢您的回复!
答案 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毫秒后超时,则再次尝试。