我对异步完全陌生。 我在尝试发出异步请求时无法关闭连接。 这是我的代码:
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
,但这没有任何区别。
有人可以帮助我吗?
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