После рассылки происходит ошибка "Unclosed client session"

Рейтинг: 0Ответов: 1Опубликовано: 07.08.2023

Пишу бот в который рассылает даты, есть основной файл мейн он работает нормально

И есть файл crona.py, он запускается каждый день по времени (использую pythonanywere)

Код отрабатывает хорошо, только после этого возникает такая ошибка:

Пользователь заблокировал бот
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x7fa554cf6350>
Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x7fa554cf1360>, 118853.30485604)]']
connector: <aiohttp.connector.TCPConnector object at 0x7fa554cf4e50>

Вот код который я использую для рассылки


import asyncio
from sqlalchemy.orm import sessionmaker
from aiogram import Bot, executor, types
import config
from bot import basic_commands
from aiogram.utils import exceptions

from sqlalchemy import create_engine
from bot.basic_commands import User
import random
import dates


# Initialize bot and dispatcher
bot = Bot(token=config.API_TOKEN)


DATABASE_URL = "database url"
engine = create_engine(DATABASE_URL)
Session = sessionmaker(bind=engine)
session = Session()


async def send_messages():
    Session = sessionmaker(bind=engine)
    with Session() as session:
        users = session.query(User).all()

        for user in users:
            try:

                random_date = random.choice(list(dates.holiday_dates.keys()))
                random_message = dates.holiday_dates[random_date]
                random_sticker = random.choice(config.stickers_key)
                message_group = [random_date, random_message]

                await bot.send_sticker(user.telegram_id, random_sticker)

                for message_send in message_group:
                    await bot.send_message(user.telegram_id, message_send)

                await asyncio.sleep(1)

            except exceptions.BotBlocked:
                print("Пользователь заблокировал бот")

            except exceptions.ChatNotFound:
                print("ID not Found")


if __name__ == "__main__":
    asyncio.run(send_messages())

Вот код main.py

import logging
from aiogram import Bot, Dispatcher, executor, types
import config
from bot import basic_commands

# Configure logging
logging.basicConfig(level=logging.INFO)

# Initialize bot and dispatcher
bot = Bot(token=config.API_TOKEN)
dp = Dispatcher(bot)


@dp.message_handler(commands=['start', 'help', 'donate'])
async def send_welcome(message: types.Message):
    command_text = message.get_command()
    print(command_text)
    if command_text == "/start":
        await basic_commands.start_command(bot, message)


if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

мейн файл обрабатывается в другом файле, там ничего особенного, создание пользователя и так далее

И еще я понял что нельзя закрывать соедение с базой потому что мейн файл перестает работать

Ответы

▲ 0

вот она, чуть выше функции.

Session = sessionmaker(bind=engine)
session = Session()

Убери эти строки