Генераторы позволяли приостанавливать выполнение через yield, передавать значения через send(), исключения через throw() и делегировать работу через yield from. Планировщик использовал это для кооперативных корутин.
Какие возможности генераторов Python использовались для асинхронности до async/await?
Генераторы позволяли приостанавливать выполнение через yield, передавать значения через send(), исключения через throw() и делегировать работу через yield from. Планировщик использовал это для кооперативных корутин.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Генераторы позволяли приостанавливать выполнение через yield, передавать значения через send(), исключения через throw() и делегировать работу через yield from. Планировщик использовал это для кооперативных корутин.
Генератор возвращал управление с описанием ожидаемой операции, loop ждал готовности I/O и возобновлял его. yield from упростил цепочки таких ожиданий до появления отдельного синтаксиса async/await. Сам генератор не создаёт поток и не делает I/O неблокирующим: нужен соответствующий драйвер и планировщик. Этот исторический подход помогает понять механизм приостановки, но новый код обычно пишут на современных coroutine API.