Как мне создать пул соединений с помощью asyncpg для последующего использования в message_handler (aiogram 2.0)?

Сейчас мой код выглядит так: в начале работы каждого хендлера у меня создается пул соединений с помощью функции create_asyncpg_connection_pool:

@dp.message_handler(content_types=['text'])
async def main(message: types.message):
# Создание переменной для хранения user_id и вопроса пользователя, и username (person_id, 
user_question,
# person_name).
person_id = message.from_user.id
user_question = message.text

# Цикл if для того, чтобы chatgpt не отвечала на текстовые команды.
if not message.text.startswith(('/help', '/website', '/start', '/menu')):
    # Подключение к БД PostgreSQL.
    try:
        connection_pool = await create_asyncpg_connection_pool()
        # Сообщение о подготовке ответа от модели.
        message_to_remove = await bot.send_message(chat_id=person_id, text='Готовлю ответ на ваш запрос. '
                                                                           'Пожалуйста, подождите…')
        # Получение асинхронного соединения из пула.
        async with connection_pool.acquire() as connection:
            # Начало асинхронной транзакции. Объект cursor не требуется.
            async with connection.transaction():
            Код для дальнейшей работы с бд.

Функция create_asyncpg_connection_pool импортируется из другого модуля и выглядит так:

async def create_asyncpg_connection_pool():
pool = await asyncpg.create_pool(
    user=user,
    password=password,
    database=db_name,
    host=host,
    port=port,
    min_size=1,
    max_size=20
)
return pool

Проблема заключается в том, что мне приходится создавать пул соединений каждый раз, когда хендлер начинает свою работу (т.е каждый раз, когда приходит новое сообщение, пул соединений создается снова). Как мне сделать так (возможно - с помощью asyncio), чтобы пул соединений создавался при первом старте приложения (телеграм-бота), а я мог его просто импортировать и использовать внутри хендлеров?


Ответы (0 шт):