Освобождение ресурсов при исключении в асинхронной функции
У меня происходит утечка памяти при исключениях в библиотеках 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()
.
Для меня очень важно не допускать утечки памяти. Помогите разобраться.