# connection_pool模块说明 connection_pool模块定义了一个通用的支持异步模式的网络连接池框架,支持通过对已有的连接模块快速实现对应的连接池管理能力,例如实现网络连接池和数据库连接池。 ## 模块标准使用步骤(以sqlite为例) 1、开发PoolConnectionFW的实现类,继承PoolConnectionFW并且实现需要实现的函数: ``` from HiveNetCore.utils.run_tool import AsyncTools from HiveNetCore.connection_pool import PoolConnectionFW class SQLitePoolConnection(PoolConnectionFW): """ SQLite连接池连接对象 """ ############################# # 需要继承类实现的函数 ############################# async def _real_ping(self, *args, **kwargs) -> bool: """ 实现类的真实检查连接对象是否有效的的函数 @returns {bool} - 返回检查结果 """ # 不支持检测连接, 直接返回True就好 return True async def _fade_close(self) -> Any: """ 实现类提供的虚假关闭函数 注1: 不关闭连接, 只是清空上一个连接使用的上下文信息(例如数据库连接进行commit或rollback处理) 注2: 如果必须关闭真实连接, 则可以关闭后创建一个新连接返回 @returns {Any} - 返回原连接或新创建的连接 """ _close_action = self._pool._pool_extend_paras.get('close_action', None) if _close_action == 'commit': await AsyncTools.async_run_coroutine(self._conn.commit()) elif _close_action == 'rollback': await AsyncTools.async_run_coroutine(self._conn.rollback()) return self._conn async def _real_close(self): """ 实现类提供的真实关闭函数 """ await AsyncTools.async_run_coroutine(self._conn.close()) ``` 2、使用AIOConnectionPool创建连接池 ``` import aiosqlite import sqlite3 from HiveNetCore.utils.run_tool import AsyncTools from HiveNetCore.connection_pool import AIOConnectionPool # 创建连接池, 注意会通过aiosqlite.connect函数创建连接对象;另外SQLitePoolConnection是上面实现的PoolConnectionFW继承类 _pool = AIOConnectionPool( aiosqlite, SQLitePoolConnection, args=['test.db'], kwargs={'timeout': 10.0}, connect_method_name='connect', max_size=1, min_size=0, connect_on_init=True, get_timeout=1, free_idle_time=5, ping_on_get=True, ping_on_back=True, ping_on_idle=True, ping_interval=5 ) # 从连接池获取一个连接, 注意这里是一个异步io的函数调用 _conn = AsyncTools.sync_run_coroutine(_pool.connection()) # 使用连接对象进行操作 try: # 可以使用连接对象自身特有函数进行处理 ... finally: # 关闭连接对象, 把对象还回连接池, 注意这里是一个异步io的函数调用 AsyncTools.sync_run_coroutine(_conn.close()) # 关闭连接池, 注意这里是一个异步io的函数调用 AsyncTools.sync_run_coroutine(_conn.close()) ```