:비동기 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
(명확히하기 위해 : 고침을 고맙게 생각하지만,이 두 코드 샘플의 차이점을 이해하려면 실제 대답을 원합니다.) – Arafangion