Files
d3i-szct/base/conn_pool.py
T
2026-06-02 17:46:38 +08:00

55 lines
1.4 KiB
Python

import datetime
from sqlalchemy.event import listen
from sqlalchemy.pool import Pool, QueuePool
from paste.db import engine
AsyncPoolMaxCheckOut = 0
"""
异步连接池最大连接数量。
"""
AsyncPoolMaxCheckOutAt = datetime.datetime.now()
"""
异步连接池最大连接数量发生时间。
"""
GlobalPoolMaxCheckOut = 0
"""
普通连接池最大连接数量。
"""
GlobalPoolMaxCheckOutAt = datetime.datetime.now()
"""
普通连接池最大连接数量发生时间。
"""
def on_checkout(dbapi_connection, connection_record, connection_proxy):
"""
当取用连接池中的连接后,立即执行的事件。这里用来记录取用峰值数据。
"""
async_pool: QueuePool = engine.async_connect_engine().pool
global_pool = engine.connect_engine().pool
assert isinstance(global_pool, QueuePool), f"引擎类型错误."
global AsyncPoolMaxCheckOut
global AsyncPoolMaxCheckOutAt
global GlobalPoolMaxCheckOut
global GlobalPoolMaxCheckOutAt
_async_checkout = async_pool.checkedout()
if AsyncPoolMaxCheckOut < _async_checkout:
AsyncPoolMaxCheckOut = _async_checkout
AsyncPoolMaxCheckOutAt = datetime.datetime.now()
_global_checkout = global_pool.checkedout()
if GlobalPoolMaxCheckOut < _global_checkout:
GlobalPoolMaxCheckOut = _global_checkout
GlobalPoolMaxCheckOutAt = datetime.datetime.now()
def bind_listener():
listen(Pool, 'checkout', on_checkout)