Python aiohttp - 如何关闭会话?

问题描述 投票:0回答:1

我对异步完全陌生。 我在尝试发出异步请求时无法关闭连接。 这是我的代码:

def async_aiohttp_get_all(self, urls):
    """
    performs asynchronous get requests
    """
    async def get_all(urls):
        async with aiohttp.ClientSession(connector_owner=False) as session:
            async def fetch(url):
                async with session.get(url) as response:
                    #return await response.json()
                    rtn = {"url": response.url,
                           "content": await response.text()}
                    return rtn
            rslts = await asyncio.gather(*[
                fetch(url) for url in urls
            ])
            return rslts
    # call get_all as a sync function to be used in a sync context
    return sync.async_to_sync(get_all)(urls)

我收到的错误是:

Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x0000024EE21F4890>, 10368.656), (<aiohttp.client_proto.ResponseHandler object at 0x0000024EE21F4770>, 10368.671), (<aiohttp.client_proto.ResponseHandler object at 0x0000024EE21F49B0>, 10368.687), (<aiohttp.client_proto.ResponseHandler object at 0x0000024EE21F4AD0>, 10368.75), (<aiohttp.client_proto.ResponseHandler object at 0x0000024EE2261D90>, 10369.078)]']
connector: <aiohttp.connector.TCPConnector object at 0x0000024EE280C260>

我认为解决方案必须是添加

await session.close()
,我之前在网上尝试过
return rslts
,但这没有任何区别。

有人可以帮助我吗?

python aiohttp
1个回答
0
投票

with
关键字将正常关闭您的客户端连接,因此问题可能出在
connector_owner=False
删除它。

 async with aiohttp.ClientSession() as session:
    async def fetch(url):
       async with session.get(url) as response:
             #return await response.json()
             rtn = {"url": response.url,"content": await response.text()}
             return rtn

© www.soinside.com 2019 - 2024. All rights reserved.