:この非同期aiohttpコードで何が問題になっていますか?次のコードを使用して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関数が呼び出される可能性があるため、間違っています)
"応答が読み込まれる前にrecv関数が呼び出される可能性があるため、間違っています" - caレスポンスが読み込まれる前に、最初のバージョンでは「待っていますか? 'self._msg'はまだ設定されていません。 – user2357112
正確には、送信が完了した後も、私はちょうどrecvを呼び出すことはありません。しかし、ああ、それは本当に良い点です、それは*両方のバージョンが根本的に間違っていることが判明します。 「送信」と「recv」を概念的に分離したまま、修正案を提案できますか? – Arafangion
(明確にする:修正を感謝しますが、実際の答えは2つのコードサンプルの違いを理解することです) – Arafangion