From: Florimond Manca Date: Mon, 16 Dec 2019 12:11:58 +0000 (+0100) Subject: asyncio: Don't wait for the stream to close (#640) X-Git-Tag: 0.9.5~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c337938af51698c31c30d992c4f165c6fb8db92e;p=thirdparty%2Fhttpx.git asyncio: Don't wait for the stream to close (#640) * Don't wait for stream_writer to close * Add comment on why wait_closed() is not called --- diff --git a/httpx/concurrency/asyncio.py b/httpx/concurrency/asyncio.py index bb795b1d..633801f7 100644 --- a/httpx/concurrency/asyncio.py +++ b/httpx/concurrency/asyncio.py @@ -1,7 +1,6 @@ import asyncio import functools import ssl -import sys import typing from ..config import Timeout @@ -162,9 +161,14 @@ class SocketStream(BaseSocketStream): return self.stream_reader.at_eof() async def close(self) -> None: + # NOTE: StreamWriter instances expose a '.wait_closed()' coroutine function, + # but using it has caused compatibility issues with certain sites in + # the past (see https://github.com/encode/httpx/issues/634), which is + # why we don't call it here. + # This is fine, though, because '.close()' schedules the actual closing of the + # stream, meaning that at best it will happen during the next event loop + # iteration, and at worst asyncio will take care of it on program exit. self.stream_writer.close() - if sys.version_info >= (3, 7): - await self.stream_writer.wait_closed() class PoolSemaphore(BasePoolSemaphore):