Я преобразовываю полоску из 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