Dzen.ru Video Downloader

The easiest way to download Dzen.ru video, music, thumbnail without watermark or logo

Python Russian

94 7 месяцев назад

Основы Asyncio

TIP! Right-click and select "Save link as..." to download.

Loading...
В продолжение беседы о конкурентости и параллельности в Python, пришла пора посмотреть на модный молодежный asyncio

Асинхронное выполнение подходит для IO-bound задач, работает ровно 1 поток

Плюсы:
+ скорость и экономия времени, вместо x + y + z = max(x, y, z)
+ управляемость
+ меньше потребление ресурсов (в сравнении с потоками)

Минусы:
- "умирает" из-за одного блокирующего вызова (!)
- не безразмерный, нужно понимать, что корутины не бесплатные

важные принципы:
1) корутина работает как генератор
2) async - явный флаг, что данная функция является асинхронной (корутиной)
3) await - явный флаг, что в это месте функция встает на паузу и дает работать другим, пока ждет свои данные
4) event loop - цикл событий, механизм, который отвечает за планирование и запуск корутин. Можно представить как
список/очередь, из которого в вечном цикле достаются и запускаются корутины

Частые ошибки:
- не использование await внутри корутины
- создание корутины, но использование ее, как функции
- использование внутри корутин синхронного(блокирующего) кода, в том числе IO

Читать:
https://docs.python.org/3/library/asyncio.html#module-asyncio

Фаулер М. "Asyncio и конкурентное программирование на Python"