Асинхронный режим: предупреждение об устаревании get_event_loop (). Есть ли чем заменить уже сейчас, и что это значит физически?

При использовании get_event_loop() все скрипты у меня работают, но выдаётся предупреждение об устаревании "DeprecationWarning: There is no current event loop" ("Нет текущего цикла событий"). Как я понимаю, есть немалый шанс, что однажды в Python старше 3.10 это просто перестанет работать. Да и вообще, я не очень люблю стиль с неустранёнными предупреждениями, они иногда устраивают весёлую жизнь потом:-)

  1. Есть ли простой способ сейчас использовать что-то другое, чтобы предупреждения не было?
  2. А какой физический смысл этого сообщения? Это же некий экземпляр цикла, котрый нужен - он потом и запускается в run_until_complete. Что значит: "Нет текущего цикла событий", а что же тогда есть? (понятно, что история с единственным циклом для единственного потока выглядит странновато, но PEP 492 прямо говорит в первых же строках, что "This PEP assumes that the asynchronous tasks are scheduled and coordinated by an Event Loop", то есть этот цикл лежит в основе). (Python только начал изучать, так что прошу прощения, если вопрос не очень глубокий).

Вот код для примера:

    import asyncio

    async def demo():
        print(await out())

    async def out():
        return "Тест"

    event_loop = asyncio.get_event_loop() #к этой  строке предупреждение
    event_loop.run_until_complete(demo())

  

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

Автор решения: Сергей

Итого, благодаря подсказке @Сергей Шашко, использую asyncio.run() и больше предупреждение не выдаётся. Обновлённый код - ниже. Некоторая дополнительная информация по более сложным ситуациям - в комментариях, а полная информация по циклам событий и т.д. (очень много, сложно и интересно) - на docs.python.org. (Например, страница Event Loop и связанные страницы).

import asyncio

async def demo():
    print(await out())

async def out():
    return "Тест"

asyncio.run(demo()) #к этой  строке нет теперь предупреждения
→ Ссылка