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