Библиотека asyncio - мой новый краш 💕

Лучшее открытие для меня за последнее время - библиотека asyncio. Использовал я ее для ускорения питоновского цикла и получилось, что с ее помощью он отработал быстрее буквально в 100 раз!

Как это вообще возможно?

Представьте, что у вас есть 100 телеграм-каналов и вам нужно спарсить все посты за последний день. В классическом виде это цикл, который работает последовательно - канал за каналом, ссылка за ссылкой он отправляет реквесты и получает ответы. И чтобы получить информацию по всем каналам потребуется условно около 30 минут.

Загружаем asyncio, размечаем цикл функциями async - await — и вуаля — ваш скрипт отработал за 30 секунд! Все данные собраны, все аккуратно разложено по столбцам.

Ну нет, это какая-то фантастика, скажете вы. Но нет: все абсолютно реально и никакого волшебства. Дело в том, что asyncio позволяет отправлять ваши реквесты параллельно: то есть, пока ваш код ждем от сервера ответа, запускается следующая итерация. И получается, грубо говоря, что весь цикл длится примерно как одна итерация.

Из минусов: раньше, пока работает цикл, я мог отлучится на прогулку, перекусить, выпить смузю (я ж айтишник ё-маё), но теперь, когда скрипт отрабатывает за секунды, такой возможности больше нет — приходится переходить к следующей задаче и скрипя сердцем ждать, пока кто-нибудь положит базу и простой запрос будет отрабатываться час, а то и два.