@@ -50,30 +50,32 @@ def acquire(self, timeout: float) -> QuerySessionSync:
50
50
logger .error ("An attempt to take session from closed session pool." )
51
51
raise RuntimeError ("An attempt to take session from closed session pool." )
52
52
53
+ session = None
53
54
try :
54
55
_ , session = self ._queue .get_nowait ()
56
+ except queue .Empty :
57
+ pass
58
+
59
+ if session is None and self ._current_size == self ._size :
60
+ try :
61
+ _ , session = self ._queue .get (block = True , timeout = timeout )
62
+ except queue .Empty :
63
+ raise issues .SessionPoolEmpty ("Timeout on acquire session" )
64
+
65
+ if session is not None :
55
66
if session ._state .attached :
56
67
logger .debug (f"Acquired active session from queue: { session ._state .session_id } " )
57
68
return session
58
69
else :
59
70
self ._current_size -= 1
60
71
logger .debug (f"Acquired dead session from queue: { session ._state .session_id } " )
61
- except queue .Empty :
62
- pass
63
-
64
- if self ._current_size < self ._size :
65
- logger .debug (
66
- f"Session pool is not large enough: { self ._current_size } < { self ._size } , will create new one."
67
- )
68
- session = self ._create_new_session ()
69
- self ._current_size += 1
70
- return session
71
72
72
- try :
73
- _ , session = self ._queue .get (block = True , timeout = timeout )
74
- return session if session ._state .attached else self ._create_new_session ()
75
- except queue .Empty :
76
- raise issues .SessionPoolEmpty ("Timeout on acquire session" )
73
+ logger .debug (
74
+ f"Session pool is not large enough: { self ._current_size } < { self ._size } , will create new one."
75
+ )
76
+ session = self ._create_new_session ()
77
+ self ._current_size += 1
78
+ return session
77
79
78
80
def release (self , session : QuerySessionSync ) -> None :
79
81
with self ._lock :
0 commit comments