Асинхронный режим: предупреждение об устаревании get_event_loop (). Есть ли чем заменить уже сейчас, и что это значит физически?
При использовании get_event_loop() все скрипты у меня работают, но выдаётся предупреждение об устаревании "DeprecationWarning: There is no current event loop" ("Нет текущего цикла событий"). Как я понимаю, есть немалый шанс, что однажды в Python старше 3.10 это просто перестанет работать. Да и вообще, я не очень люблю стиль с неустранёнными предупреждениями, они иногда устраивают весёлую жизнь потом:-)
- Есть ли простой способ сейчас использовать что-то другое, чтобы предупреждения не было?
- А какой физический смысл этого сообщения? Это же некий экземпляр цикла, котрый нужен - он потом и запускается в 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()) #к этой строке нет теперь предупреждения