Разница во времени между открытием нового потока для запуска запросов и aiohttp.ClientSession для асинхронного ввода-вывода? - PullRequest
0 голосов
/ 25 ноября 2018

Я понял, что aiohttp поддерживает асинхронный ввод-вывод, поэтому он полностью однопоточный.Но run_in_executor вроде запускает новый поток.Но я проверил для задачи с 1000 загрузок, кажется, разница довольно незначительная.Но я предполагаю, что aiohttp должен быть намного быстрее, потому что стоимость потока.Я сделал что-то не так?

async def get(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as resp:
            print(url, resp.status)
            print(url, await resp.text())

loop = asyncio.get_event_loop()     
tasks = [                           
    get("http://www.google.com"),
    get("http://www.google.com")
]
loop.run_until_complete(asyncio.wait(tasks))    
loop.close() 




async def get_via_thread(url):
    loop = asyncio.get_event_loop()
    try:
        response = await loop.run_in_executor(None, functools.partial(requests.get, url=url))

1 Ответ

0 голосов
/ 25 ноября 2018

Но я протестировал задачу с 1000 загрузок, кажется, что разница довольно незначительна.

Возможно, проблема где-то в вашем тесте.Трудно сказать, где именно, так как вы не предоставили один для воспроизведения:)

В качестве примера, вы можете взглянуть на один недавний вопрос , где OP пытался сравнить потоки и сопрограммы ине получил никакой разницы и ответил , где этот результат объяснен и исправление предоставлено.

...