Почему так много накладных расходов при использовании https вместо http с aiohttp - PullRequest
1 голос
/ 28 мая 2020

Я преобразовываю полоску из syn c requests в asyn c aiohttp, потому что я хотел бы делать действительно быстрые запросы к нескольким серверам. Одна вещь, с которой я сейчас борюсь, заключается в том, что время отклика HTTPS намного выше с aiohttp, чем с requests.

Ниже приведен как можно более короткий пример кода, в котором я делаю запрос на HTTP или HTTPS, а для библиотеки requests это не имеет большого значения, но с aiohttp это делает. Для запроса используются два метода:

requests.request('GET', url) и aiohttp.request('GET', url)

Я не понимаю, почему aiohttp намного хуже обрабатывает запросы https. ?

import time
import aiohttp
import asyncio
import requests

URL = 'https://google.com' # 'https://google.com' #  takes asyncio ~x2 as long

time1 = time.time()
responseAsync = []
async def fetch(session):
    async with session.request(method='GET', url=URL) as response:
        return await response.read()

async def run():
    uris = ['list of uris, not used now']
    tasks = []

    async with aiohttp.ClientSession() as session:
        for uri in uris:
            task = asyncio.ensure_future(fetch(session))
            tasks.append(task)
        responseAsync.append(await asyncio.gather(*tasks))

loop = asyncio.get_event_loop()
future = asyncio.ensure_future(run())
loop.run_until_complete(future)

time2 = time.time()

session = requests.Session()
responseSync = [session.request('GET', URL)]  # and some extra more requests..

time3 = time.time()


totaltimeAsyncio = (time2 - time1) * 1000
totaltimeRequests = (time3 - time2) * 1000
print('Response time async request:', totaltimeAsyncio)
print('Response time sync request:', totaltimeRequests)

вывод HTTP:

Response time async request: 130.8588981628418
Response time sync request: 107.31077194213867

вывод HTTPS:

Response time async request: 571.195125579834
Response time sync request: 167.56391525268555
...