Я надеюсь использовать aiohttp.ClientSession
кешировать мое соединение после того, как оно будет быстрее, но я обнаружил, что когда я использую asyncio.sleep, имитирую интервал времени более 10 с, соединение будет похоже на первое подключение, время меньше 10сек будет как кешировано. Как мне это сделать?
async def main():
conn = aiohttp.TCPConnector(ttl_dns_cache=None,limit_per_host=10)
trace_config = aiohttp.TraceConfig()
trace_config.on_request_start.append(on_request_start)
trace_config.on_request_end.append(on_request_end)
session = aiohttp.ClientSession(connector=conn,trace_configs=[trace_config])
await asyncio.create_task(add_task(session,4))
await asyncio.sleep(15)
await asyncio.create_task(add_task(session))
await asyncio.create_task(add_task(session))
async def on_request_start(session, trace_config_ctx, params):
start_time = time.perf_counter()
trace_config_ctx.start = start_time
async def on_request_end(session, trace_config_ctx, params):
end_time = time.perf_counter()
elapsed = end_time - trace_config_ctx.start
print("Request took {}".format(elapsed))
async def add_task(session,num=4):
task = []
for i in range(num):
task.append(fetch('xxxx.com',session))
start_time = time.perf_counter()
results = await asyncio.gather(*task)
print('=====================')
if __name__ == '__main__':
uvloop.install()
asyncio.run(main())
Вывод:
Request took 0.23638559999999997
Request took 0.24373
Request took 0.2442225
Request took 0.2806297999999998
=====================
Request took 0.17726310000000112
Request took 0.18133539999999826
Request took 0.18915810000000022
Request took 0.22994100000000017
=====================
**USE 'await asyncio.sleep(5)' OR NOT USE IT**
Request took 0.24224590000000013
Request took 0.24209349999999996
Request took 0.24268460000000003
Request took 0.261196
=====================
Request took 0.04700550000000003
Request took 0.049366400000000255
Request took 0.05276870000000056
Request took 0.051986700000000496
=====================