Я нашел этот фрагмент кода из блога shipperkongen о том, как отправлять параллельные запросы с использованием asyncio. Я добавил timeit для расчета времени, используемого для запросов. Тем не менее, кажется, что ожидание завершения всех запросов, прежде чем приступить к вычислению необходимого времени.
Я хотел бы знать, как получить время между параллельным отправленным запросом и первым ответом. Как мне изменить код для достижения этой цели? Спасибо
Обратите внимание, что я добавил в строки timeit и использую Python3.6
import asyncio
import concurrent.futures
import requests
import timeit
async def main():
with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor:
loop = asyncio.get_event_loop()
start = timeit.default_timer()
futures = [
loop.run_in_executor(
executor,
requests.get,
'http://example.org/'
)
for i in range(20)
]
for response in await asyncio.gather(*futures):
stop = timeit.default_timer()
pass
elapsed = stop - start
print(elapsed)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Я получил сообщение об ошибке «Возврат» со значением в асинхронном генераторе », когда я попытался с asyncio.as_completed(futures)
import asyncio
import concurrent.futures
import requests
import timeit
async def main():
with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor:
loop = asyncio.get_event_loop()
start = timeit.default_timer()
futures = [
loop.run_in_executor(
executor,
requests.get,
'http://example.org/'
)
for i in range(20)
]
for resp in asyncio.as_completed(futures):
res = yield resp
print(res.status_code)
stop = timeit.default_timer()
elapsed = stop - start
print(elapsed)
return elapsed
loop = asyncio.get_event_loop()
loop.run_until_complete(main())