Рубрики
Без рубрики

Введение в AioHTTP

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Python 3.5 Добавлен новый синтаксис, который позволяет разработчикам создавать асинхронные приложения и более простые пакеты. Один такой пакет – AioHTTP который является HTTP-клиентом/сервером для Asyncio. В основном это позволяет писать асинхронные клиенты и серверы. Пакет AIOHTTP также поддерживает сервер WebSockets и Client WebSockets. Вы можете установить AioHTTP, используя PIP:

pip install aiohttp

Теперь, когда у нас установлено AioHTTP, давайте посмотрим на один из их примеров!

Получение веб-страницы

Документация для AioHTPP имеет Забавный пример Это показывает, как взять HTML веб-страницы. Давайте посмотрим на него и посмотрим, как это работает:

Здесь мы просто импортируем AioHTTP, Python’s asyncio and async_timeout, что дает нам возможность тайм-аута Coroutine. Мы создаем нашу петлю событий в нижней части кода и вызовите функцию Main (). Он создаст объект ClientSessions, который мы передаем в нашу функцию Fetch () вместе с каким URL для получения. Наконец, в функции Fetch () мы используем наш тайм-аут и попытайтесь получить HTML URL. Если все работает без времени, вы увидите кучу текста, изверженного в STDOUT.

Загрузка файлов с AioHTTP

Довольно распространенная задача, которую сделает разработчики, – это загружать файлы с помощью потоков или процессов. Мы можем скачать файлы, используя Coroutines тоже! Давайте узнаем, как:

Здесь вы заметите, что импортируем пару новых предметов: AioHTTP и async_timeout Отказ Последний является фактически одним из зависимостей AioHTTP и позволяет нам создавать менеджер контекста тайм-аута. Давайте начнем в нижней части кода и работать на дороге. В нижнем условном заявлении мы запускаем нашу петлю асинхронного события и вызовите нашу основную функцию. В главной функции мы создаем Клицессионация Объект, на который мы передаем нашу функцию загрузочного COROUTINE для каждого из URL-адресов, которые мы хотим скачать. В Download_coroutine мы создаем async_timeout.timeout () Контекстный менеджер, который в основном создает таймер x секунд. Когда заканчиваются секунды, менеджер контекста заканчивается или раз. В этом случае время ожидания 10 секунд. Далее мы называем нашу сессию Получить () Метод, который дает нам объект ответа. Теперь мы добираемся до части, которая немного волшебна. Когда вы используете Содержание Атрибут объекта ответа, он возвращает экземпляр AioHTTP.streamreader Что позволяет нам загружать файл в кусками любого размера, который мы хотели бы. Как мы читаем файл, мы пишем это на локальный диск. Наконец мы называем ответы Выпуск () Метод, который завершит обработку ответа.

Согласно документации AioHTTP, поскольку объект ответа был создан в контексте-менеджере, он технически вызовет отпустите () неявно. Но в Python явное, как правило, лучше, и в документации есть записка, которую мы не должны полагаться на соединение, просто уходя, поэтому я считаю, что лучше просто освободить его в этом случае.

Есть одна часть, которая все еще блокирует здесь, и это является частью кода, который фактически пишет на диск. Пока мы пишем файл, мы все еще блокируем. Есть другая библиотека под названием AioFiles То, что мы могли бы использовать, чтобы попытаться сделать файл писать асинхронные тоже, мы посмотрим на это следующее.

Примечание: раздел выше пришел от одного из моих предыдущих Статьи Отказ

Использование AioFiles для асинхронного письма

Вам нужно будет установить AioFiles сделать эту работу. Давайте выберем это из этого пути:

Теперь, когда у нас есть все предметы, которые нам нужны, мы можем обновить наш код! Обратите внимание, что этот код работает только в Python 3.6 или выше.

Единственное изменение добавляет импорт для AioFiles А затем измените, как мы открываем файл. Вы отметите, что сейчас

И что мы ждут ждут записать часть кода:

Кроме того, код такой же. Есть некоторые вопросы по мобильности, упомянутые здесь Что вы должны знать о.

Упаковка

Теперь вы должны иметь базовое понимание того, как использовать AioHTTP и AioFiles. Документация для обоих проектов стоит выглядеть как этот учебник действительно только царапает поверхность того, что вы можете сделать с этими библиотеками.

Связанное чтение