Python 3.4+до 3.11Асинхронное программированиефункция
@asyncio.coroutine
удалено
Декоратор, превращавший генератор с yield from в корутину asyncio. Удалён в Python 3.11 — пишите async def и await.
Синтаксис
@asyncio.coroutine # до 3.11
До синтаксиса async/await (Python 3.5) корутины asyncio были генераторами: функцию помечали @asyncio.coroutine, а ожидали через yield from. После появления async def декоратор держали ради совместимости, в 3.8 объявили устаревшим и в 3.11 убрали. Как переписать: уберите декоратор, def замените на async def, каждое yield from замените на await. Запуск верхней корутины — asyncio.run(main()) вместо loop.run_until_complete().
Примеры
# Python 3.11+
import asyncio
try:
asyncio.coroutine
except AttributeError as e:
print(type(e).__name__) # → AttributeError
# Python 3.11+
import asyncio
async def answer():
await asyncio.sleep(0)
return 42
print(asyncio.run(answer())) # → 42
import asyncio
@asyncio.coroutine
def answer():
yield from asyncio.sleep(0)
return 42
loop = asyncio.new_event_loop()
print(loop.run_until_complete(answer())) # → 42
loop.close()
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности