После рассылки происходит ошибка "Unclosed client session"
Пишу бот в который рассылает даты, есть основной файл мейн он работает нормально
И есть файл 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)
мейн файл обрабатывается в другом файле, там ничего особенного, создание пользователя и так далее
И еще я понял что нельзя закрывать соедение с базой потому что мейн файл перестает работать
Источник: Stack Overflow на русском