2121
2222
2323class Client :
24- def __init__ (self , socket_dir = None ):
24+ def __init__ (self , socket_dir = None , retry_timeout = None ):
2525 socket_dir = os .path .abspath (socket_dir or '/tmp/zrpc_sockets' )
2626
2727 context = zmq .Context .instance ()
@@ -30,7 +30,9 @@ def __init__(self, socket_dir=None):
3030 self ._context = context
3131 self ._poller = zmq .Poller ()
3232 self ._sockets = sockets
33+
3334 self ._socket_dir = socket_dir
35+ self ._retry_timeout = retry_timeout or 1
3436
3537 try :
3638 os .makedirs (socket_dir , exist_ok = True )
@@ -41,8 +43,8 @@ def __init__(self, socket_dir=None):
4143
4244 def __del__ (self ):
4345 try :
44- for socket in self ._sockets :
45- socket . close ( linger = 0 )
46+ for socket_name in list ( self ._sockets . keys ()) :
47+ self . __disconnect ( socket_name )
4648 except AttributeError :
4749 pass
4850
@@ -61,7 +63,7 @@ def __connect(self, socket_name):
6163 sockets [socket_name ] = socket
6264
6365 self ._poller .register (socket , zmq .POLLIN )
64- logger .debug ('Connected to "%s"' % socket_name )
66+ logger .debug ('Connected to "%s"' , socket_name )
6567
6668 def __disconnect (self , socket_name ):
6769 sockets = self ._sockets
@@ -73,7 +75,7 @@ def __disconnect(self, socket_name):
7375 socket .close (linger = 0 )
7476
7577 self ._poller .unregister (socket )
76- logger .debug ('Disconnected from "%s"' % socket_name )
78+ logger .debug ('Disconnected from "%s"' , socket_name )
7779
7880 def call (self , server , method , args = (), kwargs = {}, timeout = None ):
7981 """
@@ -99,17 +101,17 @@ def call(self, server, method, args=(), kwargs={}, timeout=None):
99101 current_time = start_time
100102 elapsed_time = current_time - start_time
101103
102- iter_timeout = 1
104+ retry_timeout = self . _retry_timeout
103105 while elapsed_time <= timeout :
104106 socket .send (request )
105- timeout_ms = 1000 * max (0 , min (iter_timeout , timeout - elapsed_time ))
106- logging .debug ('Polling sockets with {} ms timeout' . format ( timeout_ms ) )
107+ timeout_ms = 1000 * max (0 , min (retry_timeout , timeout - elapsed_time ))
108+ logging .debug ('Polling sockets with %s ms timeout' , timeout_ms )
107109 events = dict (self ._poller .poll (timeout = timeout_ms ))
108110
109111 if socket in events :
110112 break
111113
112- logger .error ('No response from "%s"- reconnecting...' % server )
114+ logger .error ('No response from "%s" - reconnecting...' % server )
113115 self .__disconnect (server )
114116 self .__connect (server )
115117 socket = sockets [server ]
0 commit comments