Асинхронные возможности Python
Асинхронность:
- Явная (параллелизм) — в языке нет
- Со скрытой активацией (обратные вызовы, callbacks) — всё зависит от mainloop
- Сопрограммная — вот!
Модель
Как работает yield from
Ловля return из генератора с помощью yield from
Асинхронность как произвольное исполнение сегментов кода между yield-ами
- Понятие образующего цикла (main loop)
Передача управления в main loop с помощью явного yield
Обмен данными с сегментами сопрограмм с помощью .send()
Async
async def ~== генератор
yield from ~== await
@types.coroutine — чтобы и yield и return (не доделали ещё?)
async def + yield — совсем другое, это именно то, что кажется, специальные асинхронные генераторы, которые можно проходить async for (причём в конструкторах вида [… async for i in асинхронный-гененратор …] тоже)
Самое сложное — это логика образующего цикла.
Asyncio
- Самое сложное — это логика образующего цикла
Самое ненужное — это логика образующего цикла (достаточно знать, как он работает, а не что делает)
⇒
- Запрограммируем образующий цикл заранее, насуём туда инструментов
Упростим протокол управления до одного понятия — future
(asyncio specific) обмажем огромным количеством применений IRL
Основные понятия:
- Manloop
- Task
- Future
- …
И толстый-толстый слой шоколада!
Д/З
Задач на EJudge нет.
TODO