Представь ситуацию: ты разрабатываешь бэкенд веб-платформу, которой необходимо регулярно делать по 10 запросов в 10 разных API
- При обычном использовании
requests мы отправляем первый запрос, ждём ответа, потом второй, потом третий и так далее...- А можно сделать так: пока один API обрабатывает наш запрос, программа может переключиться на работу с другими запросами
Вот для таких задач и существует
aiohttpaiohttp - это библиотека для асинхронной работы с HTTP в Python, с её помощью можно как отправлять HTTP-запросы, так и поднимать свой web-сервер
Главная фишка тут именно в асинхронности
Допустим, у нас есть несколько адресов:
import asyncio
import aiohttp
async def get_site(session, url):
async with session.get(url) as response:
print(url, response.status)
async def main():
urls = [
"https://python.org",
"https://github.com",
"https://google.com"
]
async with aiohttp.ClientSession() as session:
await asyncio.gather(
*[get_site(session, url) for url in urls]
)
asyncio.run(main())
Что здесь происходит? 👇
1. Мы создаём одну клиентскую сессию (
ClientSession)2. Делаем сразу несколько запросов через
asyncio.gather() - функцию, которая запускает несколько асинхронных операций вместе и ждёт, пока они завершатся3. И не ждём, пока каждый запрос полностью закончится перед запуском следующего
4. Пока мы ждём ответ от одного сайта, Python может переключиться на обработку другого запроса
В этих задачах
aiohttp будет особенно полезен:- работа с большим количеством API
- парсеры и сбор данных
- микросервисы
- Telegram-боты
- любые задачи, где программа много ждёт сеть
Чем это лучше обычной библиотеки
requests?1. Если нужно сделать один-два запроса, то
requests может подойти:requests.get(url)
2. Но если запросов сотни, код на
requests много времени просто ждёт ответа от API, а с aiohttp это время ожидания можно использовать для выполнения других запросовВажно: aiohttp не делает сам HTTP-запрос быстрее, выигрыш появляется за счёт того, что во время ожидания выполнения одного запроса программа может заниматься другими
Подводя итог, можно сказать следующее:
requests - простая и удобная библиотека для обычных запросов и небольших скриптовaiohttp - библиотека помощнее, которая нужна в ситуациях, когда начинается серьёзная асинхронная работа с сетьюА какие асинхронные библиотеки вы использовали в своих проектах?
























