gpt4 book ai didi

python - 这个异步 aiohttp 代码有什么问题?

转载 作者:行者123 更新时间:2023-11-28 17:12:59 26 4
gpt4 key购买 nike

对于以下使用 aiohttp 的代码:

async def send(self, msg, url):
async with aiohttp.ClientSession() as session:
async with session.post(url, data=msg) as response:
self._msg = response.read()

async def recv(self):
return await self._msg

它有效...大部分时间,但偶尔(实际上经常)会导致各种异常 - 通常是截断的响应,或者连接已经关闭的异常。

相比之下,下面的工作完美:

async def send(self, msg, url):
async with aiohttp.ClientSession() as session:
async with session.post(url, data=msg) as response:
self._msg = await response.read()

async def recv(self):
return self._msg

我想知道为什么,因为第二个版本在技术上不符合我的目的,我需要修复它。 (这是不正确的,因为在读取响应之前可能会调用 recv 函数)

最佳答案

with 是一个上下文管理器,它在 block 内的任何语句之前和之后运行一些代码,通常是簿记。意思是,您的第一个 recv 函数很可能等待引用已关闭连接的 future ,或者类似的东西。

假设您有一些如下所示的代码:

with open(...) as file:
file.read()

它的作用大致如下:

file = open(...)
file.read()
file.close()

这等同于您在第一个示例中所做的:

file = open()
file.close()
...
file.read()

关于python - 这个异步 aiohttp 代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46208452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com