@@ -47,7 +47,8 @@ def _create_new_session(self, timeout: float):
47
47
return session
48
48
49
49
def acquire (self , timeout : float ) -> QuerySessionSync :
50
- with self ._lock :
50
+ acquired = self ._lock .acquire (timeout = timeout )
51
+ try :
51
52
if self ._should_stop .is_set ():
52
53
logger .error ("An attempt to take session from closed session pool." )
53
54
raise RuntimeError ("An attempt to take session from closed session pool." )
@@ -80,11 +81,13 @@ def acquire(self, timeout: float) -> QuerySessionSync:
80
81
81
82
self ._current_size += 1
82
83
return session
84
+ finally :
85
+ if acquired :
86
+ self ._lock .release ()
83
87
84
88
def release (self , session : QuerySessionSync ) -> None :
85
- with self ._lock :
86
- self ._queue .put_nowait (session )
87
- logger .debug ("Session returned to queue: %s" , session ._state .session_id )
89
+ self ._queue .put_nowait (session )
90
+ logger .debug ("Session returned to queue: %s" , session ._state .session_id )
88
91
89
92
def checkout (self , timeout : float = 10 ) -> "SimpleQuerySessionCheckout" :
90
93
"""WARNING: This API is experimental and could be changed.
@@ -140,8 +143,9 @@ def wrapped_callee():
140
143
141
144
return retry_operation_sync (wrapped_callee , retry_settings )
142
145
143
- def stop (self , timeout = None ):
144
- with self ._lock :
146
+ def stop (self , timeout = - 1 ):
147
+ acquired = self ._lock .acquire (timeout = timeout )
148
+ try :
145
149
self ._should_stop .set ()
146
150
while True :
147
151
try :
@@ -151,13 +155,19 @@ def stop(self, timeout=None):
151
155
break
152
156
153
157
logger .debug ("All session were deleted." )
158
+ finally :
159
+ if acquired :
160
+ self ._lock .release ()
154
161
155
162
def __enter__ (self ):
156
163
return self
157
164
158
165
def __exit__ (self , exc_type , exc_val , exc_tb ):
159
166
self .stop ()
160
167
168
+ def __del__ (self ):
169
+ self .stop ()
170
+
161
171
162
172
class SimpleQuerySessionCheckout :
163
173
def __init__ (self , pool : QuerySessionPool , timeout : float ):
0 commit comments