Хабы: Блог компании RUVDS.com, Python, Серверная оптимизация
▍ Введение
При создании нового приложения с нуля, где основным ограничивающим фактором является производительность ввода-вывода, использование asyncio может быть вполне оправданным выбором. С самого начала можно интегрировать неблокирующие библиотеки, совместимые с asyncio, такие как asyncpg и aiohttp. Однако большая часть работы может быть связана с поддержкой уже существующего кода, который использует блокирующие библиотеки ввода-вывода, например, requests для HTTP-запросов или psycopg для взаимодействия с базами данных Postgres. Кроме того, возможно, что подходящих библиотек, совместимых с asyncio, просто не существует. В таком случае, как можно извлечь выгоду из конкурентных преимуществ, которые предлагает asyncio?
Многопоточность предоставляет решение для данной задачи. Поскольку блокирующие операции ввода-вывода освобождают глобальную блокировку интерпретатора, мы можем выполнять ввод-вывод параллельно в различных потоках. Аналогично библиотеке multiprocessing, asyncio позволяет использовать пулы потоков, что даёт нам все преимущества многопоточности, не отказываясь от таких API, как gather и wait.
Читать дальше →