python - '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
=====================
解决方案
推荐阅读
- python - 使用 string.punctuation 删除字符串的标点符号时出错
- node.js - 如何让 node.js 在 docker 容器中运行以通过 Docker 解析 DNS?
- java - 两个线程都停留在Java中的等待状态
- google-sheets - 在 Query seacrh 中使用 Checkbox 作为条件
- c# - 剃须刀页面中不传输表单数据
- if-statement - 如何在 Google 表格中计算当前/最长收入与目标
- elasticsearch - 如何使用弹性搜索在过滤器中实现精确匹配?
- r - 无法正确执行带有两条线的曲线图
- java - 如何让消息在 onEnable 中等待?
- c++ - CLion 无法使用 Visual Studio 编译简单的测试程序