Как мне создать пул соединений с помощью 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), чтобы пул соединений создавался при первом старте приложения (телеграм-бота), а я мог его просто импортировать и использовать внутри хендлеров?