Aiohttp - 我应该在轮询restful api时保持会话活动24/7吗?

时间:2018-03-05 09:22:08

标签: python aiohttp

抱歉,这是图书馆的第一次计时器。我每隔10秒轮询一个宁静的端点。 我不明白以下哪一项是合适的:

import aiohttp
import asyncio

async def poll(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as r:
            return await r.text()

async def main():
    while True:
        await asyncio.sleep(10)
        print(await poll('http://example.com/api'))

loop = asyncio.get_event_loop()
loop.create_task(main())
loop.run_forever()

或者会话变量永远存在:

import aiohttp
import asyncio

async def poll(url):
    async with aiohttp.ClientSession() as session:
        await asyncio.sleep(10)
        async with session.get(url) as r:
            print(await r.text())

loop = asyncio.get_event_loop()
loop.create_task(poll('http://example.com/api'))
loop.run_forever()

我希望后者是可取的,但是来自非异步请求库,我不习惯会话的想法。由于连接池或其他因素,我实际上会遇到更快的响应时间吗?

1 个答案:

答案 0 :(得分:2)

来自官方文件:

  

不要为每个请求创建会话。你最有可能需要一个   每个应用程序的会话,完全执行所有请求。

     

会话中包含一个连接池。连接重用和   keep-alives(两者都默认开启)可以加快总体性能。

当然后者更好,绝对会有更快的体验。