简体   繁体   中英

Aiohttp - should I keep the session alive 24/7 when polling restful api?

Sorry, library first-timer here. I am polling a restful endpoint every 10 seconds. Its not obvious to me which of the following is appropriate:

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()

Or the session variable persists 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()

I expect the latter is desirable, but coming from the non-asynchronous requests library, I'm not used to the idea of sessions. Will I actually experience faster response times because of connection pooling or other things?

From official document:

Don't create a session per request. Most likely you need a session per application which performs all requests altogether.

A session contains a connection pool inside. Connection reusage and keep-alives (both are on by default) may speed up total performance.

Surely the latter one is better and definitely you will have a faster experience.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM