Сначала стоит разобраться в том, что вообще такое
генераторы. За этим лучше всего обратиться к учебнику. Потом стоит погуглить про
кооперативную многозадачность. После разобраться в значении термина
асинхронность и её базовых принципах. Хорошо просветляют доклады Дэвида Бизли - "
Generator Tricks for Systems Programmers", "
A Curious Course on Coroutines and Concurrency" и "
https://www.dabeaz.com/finalgenerator/index.html". Понимание всего вышеперечисленного позволит понять как именно работают
yield from
и
@asyncio.coroutine
, в чём их польза и зачем появилась потребность в
async
и
await
.
Грубо говоря, в Python есть генераторы, которые являются обобщённым механизмом, с помощью которого можно реализовать многое, включая асинхронность. Но универсальное быстрым не бывает, поэтому в интерпретатор добавили два ключевых слова, делающих примерно то же самое, что и
yield from
с
@asyncio.coroutine
, но специализированные только для этого и выполняющие свою работу на более низком уровне, а значит быстрее.