“无法写入关闭传输”是什么意思?

Jos*_*Fox 5 python-3.x python-asyncio aiohttp

"Cannot write to closing transport"我收到了从 引发的异常aiohttp.http_writer.StreamWriter#_write,但仅在一小部分情况下。

相关片段。

    session: aiohttp.ClientSession
    async with session.get(url, timeout=60) as response:
        txt = await response.text()
        response.close()
        return txt
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?我不认为服务器大小正在关闭套接字。

Jos*_*Fox 5

答案:我们应该为每个请求创建一个新会话。也不需要response()显式关闭,因为上下文管理器会处理它。

async with aiohttp.ClientSession().get(url, timeout=60) as response:
    txt = await response.text()
    return txt
Run Code Online (Sandbox Code Playgroud)

  • 每个请求的专用会话帮助我修复了“无法写入关闭传输”异常,尽管“aiohttp”的文档说相反:“首先创建会话,使用实例执行 HTTP 请求并启动 WebSocket 连接。” (https://docs.aiohttp.org/en/v3.0.1/client_advanced.html#client-session)。我在 Ubuntu 18.04.4 LTS 上使用 `aiohttp` 3.6.2 (2019-10-09) 和 Python 3.6.9。 (2认同)