多个 aiohttp 会话

Multiple aiohttp sessions

有没有办法让每个 URL 都有自己的会话?我阅读了 Github 上的 aiohttp 文档,但我找不到这是否可行。我知道请求是可能的,但不确定如何使用 aiohttp 做到这一点。感谢您提供任何帮助,因为我一直无法找到答案。

sites = ['http://example.com/api/1', 'http://example.com/api/2']

async def fetch(session, site):
    print('Fetching: ' + site)

    async with session.get(site) as response:
        return await response.text()

async def main():
    t = []

    async with aiohttp.ClientSession() as session:
        for site in sites:
            task = asyncio.create_task(fetch(session, site))
            t.append(task)
        await asyncio.gather(*t)

Is there a way for each URL have its own session?

是的,只需将会话创建移动到 fetch 协程中:

async def fetch(site):
    print('Fetching: ' + site)

    async with aiohttp.ClientSession() as session, \
            session.get(site) as response:
        return await response.text()

async def main():
    t = []

    for site in sites:
        task = asyncio.create_task(fetch(site))
        t.append(task)
    await asyncio.gather(*t)