首页 > 解决方案 > 'aiohttp.ClientSession' 缓存不起作用

问题描述

我希望使用aiohttp.ClientSession缓存我的连接更快,但是我发现当我使用'asyncio.sleep'模拟时,间隔时间超过10s连接会像第一次连接,时间小于10s会像缓存. 我该怎么做?

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

=====================

标签: pythonclientpython-asyncioaiohttp

解决方案


推荐阅读