Asyncio — полезная библиотека. Но разобраться с ней не так‑то просто. Документации по большей части недостаточно. Хочется примеров. Хочется подробных объяснений. Последние несколько выходных я потратил на эксперименты с этой библиотекой. Во время чего в Pocket осели довольно интересные ссылки, которыми я хочу поделиться.
Короткое введение в asyncio и aiohttp на нескольких небольших примерах. Примеры сделаны максимально простыми. Используется синтаксис с декораторами — статья написана довольно давно. Как отмечает автор, эта статья показывает лишь верхушку айсберга.
Описание небольшого примера скрипта, проходящего по страничкам и вынимающего magnet‑ссылку на Torrent из тела страницы. Статья также довольно старая. Включил я её в список из‑за бонусного трека — с рассказом о том, как не убить асинхронными запросами сервер. Хотя я бы использовал возможности aiohttp по ограничению количества запросов.
В этой статье рассматривается довольно интересный и необычный кейс для asyncio: выстраивается обработка стандартного вывода подпроцесса. О таком использовании asyncio я бы даже не подумал. Однако у автора получился довольно интересный код.
- A Web Crawler With Asyncio Coroutines by A. Jesse Jiryu Davis and Guido van Rossum
Подробный разбор того, как на Python, используя asyncio, написать «выкачивалку интернета». На мой взгляд, в этой статье слишком много воды и отступлений (к примеру, на то, чтобы разобрать, как работают генераторы). Вообще, эта статья — не самое лучшее объяснение, как работать с asyncio. Оставлена в списке исключительно из‑за автора.
- Making 1 million requests with python‑aiohttp by Paweł Miech
Автор этой статьи написал свой микро‑бенчмарк для aiohttp. И ему удалось выжать скорости в 111 111 запросов в минуту на абсолютно бесполезной задаче. Круто. Но не в этом достоинство статьи. Автор довольно подробно объясняет, как пользоваться aiohttp и какие подводные камни есть.
Куски кода с примерами того, как использовать те или иные аспекты библиотеки. Пожалуй, поиски решения своих задач стоит начинать именно отсюда.
- I don’t understand Python’s Asyncio by Armin Ronacher
В этой статье Армин жалуется на сложность и многообразие концепций asyncio. В этом есть здравое зерно. Хотя мне кажется, большая часть сложности возникает из‑за того, что ещё не выработались нормальные подходы к использованию библиотеки.
- AsyncIO for the Working Python Developer by Yeray Diaz
Ещё один учебник по asyncio. В примерах используется новый синтаксис. Все примеры довольно подробно объяснены.
- Asyncio Coroutine Patterns: Beyond await by Yeray Diaz
Ещё одна статья того же автора. Эта ориентирована на более опытных разработчиков. В ней рассказывается о нескольких паттернах использования asyncio: рекурсивных корутинах, «запусти и забудь» (автор использует термин fire and forget, что является отсылкой к неуправляемым реактивным снарядам) и некоторых других.
Bonus: Asyncio: An Introduction by Mike Driscoll
Ещё один учебник. Вдруг не хватило тех, что я перечислил выше.