Ошибка asyncio:Task exception was never retrieve; exception=RuntimeError(‘asyncio.run() cannot be called from a running event loop’)> Что делать?

Ошибка "asyncio:Task exception was never retrieve; exception=RuntimeError('asyncio.run() cannot be called from a running event loop')" возникает, когда пытаетесь вызвать функцию asyncio.run() внутри уже запущенного event loop'а.

asyncio.run() – это функция, которая предоставляется в Python 3.7 и выше, для удобного запуска корутины (asyncio coroutine) как ожидающей (awaitable) функции и создания нового event loop'а. Она рекомендуется для использования в самых простых случаях, когда вам не требуется доступ к event loop'у напрямую.

Чтобы решить эту ошибку, вам необходимо убедиться, что код, вызывающий функцию asyncio.run(), выполняется внутри корутины или асинхронной функции. Код, который находится вне асинхронного контекста, не может вызывать asyncio.run().

Пример правильного использования asyncio.run():

import asyncio

async def main():
# ваш асинхронный код

asyncio.run(main())

В приведенном примере функция main() является асинхронной функцией. Вызов asyncio.run(main()) создает новый event loop, запускает асинхронную функцию main() и ожидает ее завершения.

Если вы уже находитесь внутри асинхронного контекста, например, внутри другой асинхронной функции или корутины, вы можете использовать текущий event loop, вместо вызова asyncio.run(). Для этого вы можете использовать функцию asyncio.get_event_loop():

import asyncio

async def main():
# ваш асинхронный код

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

В данном примере мы использовали функцию asyncio.get_event_loop(), чтобы получить текущий event loop, а затем вызвали loop.run_until_complete(main()), чтобы запустить асинхронную функцию main() и ожидать ее завершения.

Однако, если вы работаете с библиотеками или фреймворками, которые уже предоставляют свой собственный event loop, не рекомендуется использовать asyncio.run(). Вместо этого следует использовать методы, предоставленные самой библиотекой или фреймворком для запуска и управления event loop'ом.

В общем, вам следует убедиться, что вызов функции asyncio.run() выполняется внутри асинхронного контекста (асинхронной функции или корутины), либо использовать функцию asyncio.get_event_loop() для получения текущего event loop'а и вызвать его методы непосредственно для запуска асинхронного кода.