Python Glossary English

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Сообщить о неточности