55 lines
1.4 KiB
Python
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)
|