Python Glossary English

Python 3.5+typesфункция

types.coroutine()

генераторы и корутины

Декоратор, превращающий генераторную функцию в корутину на генераторах: её результат можно await-нуть внутри async def.

Синтаксис

@types.coroutine
def gen_func(): ...

Это мост между старыми корутинами на yield и новыми async def — именно так устроен asyncio.sleep(0): голый yield отдаёт управление циклу событий. Возвращаемый объект остаётся генератором, а не CoroutineType, поэтому проверка isinstance на CoroutineType его не узнает. Писать новый код на нём не нужно: старый @asyncio.coroutine удалён в 3.11, а для своих await-объектов проще определить __await__.

Примеры

import asyncio
import types
@types.coroutine
def pause():
    yield
async def main():
    await pause()
    return 'done'
print(asyncio.run(main()))  # → done
print(isinstance(pause(), types.GeneratorType))  # → True

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности