Как отправить несколько медиафайлов списку людей - телеграмм
Столкнулся с проблемой, что не могу отправить несколько файлов пользователям из списка ботом в телеграмме:
import asyncio
from aiogram import Bot, types
...
async def main():
for i in range(len(database)):
await bot.send_media_group(database[i][0], media)
if __name__ == '__main__':
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
asyncio.run(main())
Ругается на функцию asyncio.run(main()) и в логах выводит только:
ValueError: I/O operation on closed file
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x000001C917E68820>
Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x000001C917E701C0>, 593529.531)]']
connector: <aiohttp.connector.TCPConnector object at 0x000001C917E68730>
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x000001C917E68520>
Если отправлять просто текст, bot.send_message, то бот отправляет всем сообщение, но все равно ругается на незакрытую сессию.
Ответы (1 шт):
Без полного кода не совсем понятно в чем может быть проблема.
Но можно предположить, что вы завершаете работу, прежде чем файлы успевают полностью отправиться. То что получалось с сообщениями только подтверждает эту версию. Сообщения отправляются быстро и ваш код успевал их корректно отправить и потом завершиться.
А сейчас у вас похоже идет завершение сессии до того как файлы отправились. Как это поправить - либо не использовать ассинхрронный вызов, либо использовать различные механизмы типа семафоров и мьютексов, чтобы подождать завершения процесса отправки и только потом завершить работу.