Привет, читатель, эта статья будет об использовании асинхронных запросов в python и о том, как он сравнивается по производительности с наиболее часто используемым синхронным методом.

Синхронный против асинхронного

Давайте рассмотрим пример запроса API, когда вы пытаетесь отправить несколько запросов и получить ответ.

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

Принимая во внимание, что асинхронные типы запросов не будут ждать первого ответа, тем временем он начнет выполнять второй запрос.

Асинхронный метод оказывается полезным при большой пакетной обработке.

Пример кода

  1. Импорт библиотек
import time
import requests
import asyncio
import aiohttp
import threading

2. Синхронный метод

def run_sync(url):
    start = time.time()
    response = requests.get(url)
    end = time.time()
    print(f"Time taken for requests request: {end - start} seconds")

if __name__ == "__main__":
    url = "https://www.example.com"

    t1 = threading.Thread(target=run_sync, args=(url,))

    t1.start()

    t1.join()
Time taken for requests request: 0.07529759407043457 seconds

3. Асинхронный метод

async def fetch_async(session, url):
    async with session.get(url) as response:
        return await response.text()

async def run_async(url):
    async with aiohttp.ClientSession() as session:
        start = time.time()
        response = await fetch_async(session, url)
        end = time.time()
        print(f"Time taken for aiohttp request: {end - start} seconds")


if __name__ == "__main__":
    url = "https://www.example.com"

    t2 = threading.Thread(target=asyncio.run, args=(run_async(url),))

    t2.start()

    t2.join()
Time taken for aiohttp request: 0.03968000411987305 seconds

Я согласен, что сравнение производительности не выглядит ошеломляющим прямо сейчас. Но представьте, что вы делаете это для сотен, тысяч или даже миллионов таких запросов.

Заключение

Если вы найдете код полезным, хлопните в ладоши. Следуйте за мной для получения большего количества таких статей, как эта. Ваша поддержка побудит меня писать больше. Мир ✌🏻.

СТАНЬТЕ ПИСАТЕЛЕМ на MLearning.ai