Освобождение ресурсов при исключении в асинхронной функции

У меня происходит утечка памяти при исключениях в библиотеках av и telegram. Я не могу разобраться как отчищать ресурсы.

Самый простой пример это в телеграмме, к примеру по какой то причине у меня неверный токен, срабатывает исключения. По идеи тут 2 варианта, либо библиотека сама отчищает ресурсы, либо я отчищаю. Я пробовал много вариантов, но эффект один.

import asyncio
from telegram import Bot
from telegram.error import InvalidToken, TelegramError


async def main():
    token = "aaaaaaaaaaaaa"
    bot = None
    try:
        bot = Bot(token=token)
        await bot.get_me()

    except InvalidToken as e:
        print(f"Invalid token: {e}")
    except TelegramError as e:
        print(f"Telegram error: {e}")
    except Exception as e:
        print(f"Exception: {e}")
    finally:
        if bot:
            try:
                await bot.close()
                print("Bot Closed.")
            except Exception as e:
                print(f"Error closing bot: {e}")

if __name__ == "__main__":
    try:
        asyncio.run(main())
    except Exception as e:
        print(f"Main error: {e}")

После выполнения данного кода происходит такая ошибка:

Invalid token: Not Found
Error closing bot: Not Found
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x000002F273C50430>
Traceback (most recent call last):
  File "E:\DEV\Python\lib\asyncio\proactor_events.py", line 116, in __del__
    self.close()
  File "E:\DEV\Python\lib\asyncio\proactor_events.py", line 108, in close
    self._loop.call_soon(self._call_connection_lost, None)
  File "E:\DEV\Python\lib\asyncio\base_events.py", line 719, in call_soon
    self._check_closed()
  File "E:\DEV\Python\lib\asyncio\base_events.py", line 508, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed

Кратко скажу что с библиотекой av траблы такие же, так как при исключении, все что в ней есть сохраняется, не удаляется, и память жрется гигабайтами, а помогает жестокий костыль в виде gc.collect().

Для меня очень важно не допускать утечки памяти. Помогите разобраться.


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