Использование asyncio для параллельного выполнения запросов

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

asyncioaiohttppython

👁Предположим, вам нужно отправить несколько HTTP-запросов и дождаться всех ответов. С помощью asyncio можно сделать это параллельно, значительно увеличив производительность по сравнению с обычным последовательным выполнением.

📝 Пример кода:

import asyncio
import aiohttp

# Функция для выполнения асинхронного HTTP-запроса
async def fetch(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.text()

# Основная функция для выполнения нескольких запросов одновременно
async def fetch_all(urls):
    tasks = [fetch(url) for url in urls]
    return await asyncio.gather(*tasks)

# Список URL для запросов
urls = ["https://example.com", "https://httpbin.org/get", "https://jsonplaceholder.typicode.com/posts"]

# Запуск асинхронной программы
loop = asyncio.get_event_loop()
results = loop.run_until_complete(fetch_all(urls))

# Вывод результатов
for result in results:
    print(result[:100])  # Печатаем первые 100 символов ответа

📌 Как это работает:

  • async def: Описываем функции, которые будут асинхронными. Они не блокируют выполнение других операций
  • async with: Используем асинхронное подключение через библиотеку aiohttp, которая позволяет работать с HTTP-запросами без блокировки
  • await asyncio.gather(*tasks): Запускаем все задачи параллельно и ждем их завершения

🔎 Преимущества:

  • — Меньше блокировок и затрат на ресурсы
  • — Процесс выполнения становится значительно быстрее, особенно при работе с большим количеством запросов
  • — Подходит для реальных приложений, работающих с внешними сервисами (например, для краулеров или микросервисов)

❗️ Этот подход позволит вам существенно повысить производительность при разработке и сократить время ожидания.

tags: #python #разработка

❤️ @recura_tech

Скриншот с темным фоном: фрагмент кода Python (asyncio, aiohttp), консоль и логотип RECURA, иллюстрация параллельных запросов
Иллюстрация: код с использованием asyncio и aiohttp.

Читайте так же