До появления ключевых слов async и await в версии Python 3.5 связь между сопрограммами и генераторами была очевидной. Чтобы разо- браться в ней, напишем простую сопрограмму, которая спит в тече- ние 1 с, применив старый синтаксис с декораторами и генераторами. Листинг 14.5 Сопрограммы на основе генераторов
import asyncio
@asyncio.coroutine
def coroutine():
print('Засыпаю!')
yield from asyncio.sleep(1)
print('Проснулась!')
asyncio.run(coroutine())
Вместо ключевого слова async мы применили декоратор @asyncio.
coroutine, который говорит, что функция является сопрограммой,
а вместо ключевого слова await – конструкцию yield from, знакомую
по использованию генераторов. В современных версиях ключевые
слова async и await – не более чем синтаксический сахар, обертываю-
щий эту конструкцию.
В https://docs.python.org/3.10/library/asyncio-task.html#generator-based-coroutines
Deprecated since version 3.8, will be removed in version 3.11: Use async def instead.
async def func(param1, param2):
do_stuff()
await some_coroutine()
import asyncio
async def coroutine():
print('Sleeping!')
yield from asyncio.sleep(1)
print('Finished!')
await coroutine()
asyncio.run(coroutine())
out:
./project.py
File "/project.py", line 1011
yield from asyncio.sleep(1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: 'yield from' inside async function
Как переделать этот пример, чтобы он работал? Обрабатываю книгу, перезабиваю все примеры