python - What's wrong with this async aiohttp code? -
for following code using aiohttp:
async def send(self, msg, url): async aiohttp.clientsession() session: async session.post(url, data=msg) response: self._msg = response.read() async def recv(self): return await self._msg
it works... of time, (frequently, actually) results in various exceptions - truncated responses, or connection being closed exception.
by contrast, following works perfectly:
async def send(self, msg, url): async aiohttp.clientsession() session: async session.post(url, data=msg) response: self._msg = await response.read() async def recv(self): return self._msg
i know why, second version technically incorrect purposes , need fix it. (it incorrect because recv function might called before response has been read)
with
context manager, runs code before , after statements within it's block, bookkeeping usually. meaning, first recv
function awaits on future references closed connection, or along these lines.
let's have code looks this:
with open(...) file: file.read()
this does, roughly:
file = open(...) file.read() file.close()
and equivalent of you're doing in first example:
file = open() file.close() ... file.read()
Comments
Post a Comment