aiohttp 未关闭的客户端会话

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

关于我之前发布的问题如何发布 aiohttp 认证请求? [重复]Send user credentials in aiohttp request 中得到回答,我将代码修改为以下内容并设法从

get_all_balances()
获得结果,但是在获得结果之前我会遇到以下错误:

未关闭的客户会话 客户会话: 未闭合的连接器 连接:['[(, 613500.125)]'] 连接器:

据我所知,该函数是用

async with
调用的,结果是
await
,我的理解是连接会根据结果关闭,所以为什么它给我一个未关闭的客户端会话错误?

import asyncio
import aiohttp
import json


base_url = 'https://api.luno.com'
lapikey = ''
lapisecret = ''


async def do(method, path, req=None, auth=False):
    args = {}
    params = None
    if req:
        try:
            params = json.loads(json.dumps(req))
        except Exception:
            params = None
    if params:
        args = dict(params=params)
    url = make_url(path, params)
    if auth:
        args['auth'] = aiohttp.BasicAuth(lapikey, lapisecret)
    async with aiohttp.ClientSession().request(method, url, **args) as res:
        try:
            return await res.json()
        except Exception as e:
            return e

def make_url(path, params):
    if params:
        for k, v in params.items():
            path = path.replace('{' + k + '}', str(v))
    return base_url + '/' + path.lstrip('/')

async def get_all_balances():
    return await do('GET', '/api/1/balance', auth=True)


print(asyncio.run(get_all_balances()))

我已经阅读了关于 aiohttp 未关闭客户端会话的其他类似问题,据我所知,我的代码已经实现了所有必要的

async with
await
关键字以在请求后正确关闭客户端会话,有什么问题吗?

python python-asyncio aiohttp
© www.soinside.com 2019 - 2024. All rights reserved.