Skip to content

Commit a45ec48

Browse files
committed
make pool init lazy
1 parent b366932 commit a45ec48

File tree

4 files changed

+50
-6
lines changed

4 files changed

+50
-6
lines changed

ydb/aio/driver.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,5 @@ def __init__(
6161
self.topic_client = topic.TopicClientAsyncIO(self, config.topic_client_settings)
6262

6363
async def stop(self, timeout=10):
64-
await self.table_client._pool.stop(timeout=timeout)
64+
await self.table_client._stop_pool_if_needed(timeout=timeout)
6565
await super().stop(timeout=timeout)

ydb/aio/table.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,11 @@ class TableClient(BaseTableClient):
151151
def __init__(self, driver, table_client_settings=None):
152152
# type:(ydb.Driver, ydb.TableClientSettings) -> None
153153
super().__init__(driver=driver, table_client_settings=table_client_settings)
154-
self._pool: SessionPool = SessionPool(self._driver, 10)
154+
self._pool: Optional[SessionPool] = None
155155

156156
def __del__(self):
157157
if not self._pool._terminating:
158-
asyncio.get_running_loop.call_soon(self._pool.stop)
158+
asyncio.get_running_loop.call_soon(self._stop_pool_if_needed)
159159

160160
def session(self):
161161
return Session(self._driver, self._table_client_settings)
@@ -176,6 +176,14 @@ async def scan_query(self, query, parameters=None, settings=None): # pylint: di
176176
lambda resp: _wrap_scan_query_response(resp, self._table_client_settings),
177177
)
178178

179+
def _init_pool_if_needed(self):
180+
if self._pool is None:
181+
self._pool = SessionPool(self._driver, 10)
182+
183+
async def _stop_pool_if_needed(self, timeout=10):
184+
if self._pool is not None:
185+
await self._pool.stop(timeout=timeout)
186+
179187
async def create_table(
180188
self,
181189
path: str,
@@ -192,6 +200,8 @@ async def create_table(
192200
:return: Operation or YDB error otherwise.
193201
"""
194202

203+
self._init_pool_if_needed()
204+
195205
async def callee(session: Session):
196206
return await session.create_table(path=path, table_description=table_description, settings=settings)
197207

@@ -211,6 +221,8 @@ async def drop_table(
211221
:return: Operation or YDB error otherwise.
212222
"""
213223

224+
self._init_pool_if_needed()
225+
214226
async def callee(session: Session):
215227
return await session.drop_table(path=path, settings=settings)
216228

@@ -257,6 +269,8 @@ async def alter_table(
257269
:return: Operation or YDB error otherwise.
258270
"""
259271

272+
self._init_pool_if_needed()
273+
260274
async def callee(session: Session):
261275
return await session.alter_table(
262276
path=path,
@@ -293,6 +307,8 @@ async def describe_table(
293307
:return: TableSchemeEntry or YDB error otherwise.
294308
"""
295309

310+
self._init_pool_if_needed()
311+
296312
async def callee(session: Session):
297313
return await session.describe_table(path=path, settings=settings)
298314

@@ -314,6 +330,8 @@ async def copy_table(
314330
:return: Operation or YDB error otherwise.
315331
"""
316332

333+
self._init_pool_if_needed()
334+
317335
async def callee(session: Session):
318336
return await session.copy_table(
319337
source_path=source_path,
@@ -337,6 +355,8 @@ async def copy_tables(
337355
:return: Operation or YDB error otherwise.
338356
"""
339357

358+
self._init_pool_if_needed()
359+
340360
async def callee(session: Session):
341361
return await session.copy_tables(source_destination_pairs=source_destination_pairs, settings=settings)
342362

@@ -356,6 +376,8 @@ async def rename_tables(
356376
:return: Operation or YDB error otherwise.
357377
"""
358378

379+
self._init_pool_if_needed()
380+
359381
async def callee(session: Session):
360382
return await session.rename_tables(rename_items=rename_items, settings=settings)
361383

ydb/driver.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,5 +284,5 @@ def __init__(
284284
self.topic_client = topic.TopicClient(self, driver_config.topic_client_settings)
285285

286286
def stop(self, timeout=10):
287-
self.table_client._pool.stop(timeout=timeout)
287+
self.table_client._stop_pool_if_needed(timeout=timeout)
288288
super().stop(timeout=timeout)

ydb/table.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1205,10 +1205,10 @@ class TableClient(BaseTableClient):
12051205
def __init__(self, driver, table_client_settings=None):
12061206
# type:(ydb.Driver, ydb.TableClientSettings) -> None
12071207
super().__init__(driver=driver, table_client_settings=table_client_settings)
1208-
self._pool: SessionPool = SessionPool(self._driver, 10)
1208+
self._pool: Optional[SessionPool] = None
12091209

12101210
def __del__(self):
1211-
self._pool.stop()
1211+
self._stop_pool_if_needed()
12121212

12131213
def async_scan_query(self, query, parameters=None, settings=None):
12141214
# type: (ydb.ScanQuery, tuple, ydb.BaseRequestSettings) -> ydb.AsyncResponseIterator
@@ -1236,6 +1236,14 @@ def async_bulk_upsert(self, table_path, rows, column_types, settings=None):
12361236
(),
12371237
)
12381238

1239+
def _init_pool_if_needed(self):
1240+
if self._pool is None:
1241+
self._pool = SessionPool(self._driver, 10)
1242+
1243+
def _stop_pool_if_needed(self, timeout=10):
1244+
if self._pool is not None:
1245+
self._pool.stop(timeout=timeout)
1246+
12391247
def create_table(
12401248
self,
12411249
path: str,
@@ -1252,6 +1260,8 @@ def create_table(
12521260
:return: Operation or YDB error otherwise.
12531261
"""
12541262

1263+
self._init_pool_if_needed()
1264+
12551265
def callee(session: Session):
12561266
return session.create_table(path=path, table_description=table_description, settings=settings)
12571267

@@ -1271,6 +1281,8 @@ def drop_table(
12711281
:return: Operation or YDB error otherwise.
12721282
"""
12731283

1284+
self._init_pool_if_needed()
1285+
12741286
def callee(session: Session):
12751287
return session.drop_table(path=path, settings=settings)
12761288

@@ -1317,6 +1329,8 @@ def alter_table(
13171329
:return: Operation or YDB error otherwise.
13181330
"""
13191331

1332+
self._init_pool_if_needed()
1333+
13201334
def callee(session: Session):
13211335
return session.alter_table(
13221336
path=path,
@@ -1353,6 +1367,8 @@ def describe_table(
13531367
:return: TableSchemeEntry or YDB error otherwise.
13541368
"""
13551369

1370+
self._init_pool_if_needed()
1371+
13561372
def callee(session: Session):
13571373
return session.describe_table(path=path, settings=settings)
13581374

@@ -1374,6 +1390,8 @@ def copy_table(
13741390
:return: Operation or YDB error otherwise.
13751391
"""
13761392

1393+
self._init_pool_if_needed()
1394+
13771395
def callee(session: Session):
13781396
return session.copy_table(
13791397
source_path=source_path,
@@ -1397,6 +1415,8 @@ def copy_tables(
13971415
:return: Operation or YDB error otherwise.
13981416
"""
13991417

1418+
self._init_pool_if_needed()
1419+
14001420
def callee(session: Session):
14011421
return session.copy_tables(source_destination_pairs=source_destination_pairs, settings=settings)
14021422

@@ -1416,6 +1436,8 @@ def rename_tables(
14161436
:return: Operation or YDB error otherwise.
14171437
"""
14181438

1439+
self._init_pool_if_needed()
1440+
14191441
def callee(session: Session):
14201442
return session.rename_tables(rename_items=rename_items, settings=settings)
14211443

0 commit comments

Comments
 (0)