@essenceo

Как работает async/await в python?

Хочу разобраться как работает asyncio на низком уровне. Знаю, что такое генераторы, корутины и как они примерно работают. В чем разница между yield from и await, @asyncio.coroutine и async? Откуда и как должны вызываться нативные корутины(async def) без asyncio? Какой принцип написания своих собственных Task и цикла событий?
  • Вопрос задан
  • 909 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Сначала стоит разобраться в том, что вообще такое генераторы. За этим лучше всего обратиться к учебнику. Потом стоит погуглить про кооперативную многозадачность. После разобраться в значении термина асинхронность и её базовых принципах. Хорошо просветляют доклады Дэвида Бизли - "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, но специализированные только для этого и выполняющие свою работу на более низком уровне, а значит быстрее.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы