master.I get the following traceback when running the attached code
404
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x0000017C63D5E310>
Traceback (most recent call last):
File "C:\Python\Python38\lib\asyncio\proactor_events.py", line 116, in __del__
self.close()
File "C:\Python\Python38\lib\asyncio\proactor_events.py", line 108, in close
self._loop.call_soon(self._call_connection_lost, None)
File "C:\Python\Python38\lib\asyncio\base_events.py", line 715, in call_soon
self._check_closed()
File "C:\Python\Python38\lib\asyncio\base_events.py", line 508, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
async def testing():
client = httpx.AsyncClient()
response = await client.get("https://www.google.com/")
await client.aclose()
print(response.status_code)
async def main():
await testing()
asyncio.run(main())
Inserting time.sleep(0.1) at the end of main() fixes it. Possibly due to the same reasons in the issues linked below.
I assume this is yet another strange issue with asyncio’s stream.close() - it schedules the closing of the socket but it’s not guaranteed to be done once client.aclose finishes, which means the socket is actually deleted upon garbage collection, and by then I suppose the event loop is already closed... The sleep() call fixed this because it allows asyncio to execute the close callback before proceeding to shutdown the async environment.
See also #825 for more discussion on a possibly related issue.
Have you tried running this on Python 3.8.2?
Also: May well be specific to Window's Proactor event loop.
Yes, definitely looks like a Windows specific issue to me - the linked issues are for Windows too.
@florimondmanca , yes upgraded to 3.8.2 to check, the result is the same.
Can confirm this is an issue with the latest PyPi version of aiohttp and Python 3.8.2 on Windows.
Okay, thank you.
I personally don’t have a Windows machine so help with investigation and possible fixes would help.
Would we need to consider black magic such as https://github.com/aio-libs/aiohttp/issues/1925#issuecomment-592596034? How about https://github.com/aio-libs/aiohttp/pull/3733?
FYI this is likely to be something to address on the HTTPCore side, as connection management and networking is done there. Might then be helpful to first come up with a minimal repro example using HTTPCore only?
It'd also be helpful to try switching to using SelectorEventLoop and let us know what the behaviour is like then... https://docs.python.org/3/library/asyncio-eventloop.html#event-loop-implementations (Or to try with Python 3.7 or earlier)
Python only switched the default event loop to proactor from 3.8 onwards. https://docs.python.org/3/library/asyncio-policy.html#asyncio.DefaultEventLoopPolicy
not sure there's a link and can't remember why now but in uvicorn we force
the SelectorEventLoop to be the default for windows
Le ven. 1 mai 2020 à 10:23 AM, Tom Christie notifications@github.com a
écrit :
It'd also be helpful to try switching to using SelectorEventLoop and let
us know what the behaviour is like then...
https://docs.python.org/3/library/asyncio-eventloop.html#event-loop-implementations
(Or to try with Python 3.7 or earlier)Python only switched the default event loop to proactor from 3.8 onwards.
https://docs.python.org/3/library/asyncio-policy.html#asyncio.DefaultEventLoopPolicy—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/encode/httpx/issues/914#issuecomment-622297443, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AAINSPTJI3OZEDU6VKCF2KLRPKBHTANCNFSM4MVRF2GQ
.
The workaround is to use the selector event loop like this:
import sys
import asyncio
if sys.version_info[0] == 3 and sys.version_info[1] >= 8 and sys.platform.startswith('win'):
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
The following from the documentation will not resolve this issue (for some reason):
import asyncio
import selectors
selector = selectors.SelectSelector()
loop = asyncio.SelectorEventLoop(selector)
asyncio.set_event_loop(loop)
Thanks @Baysul.
This bug report looks like it is tracking the same issue.
Same as with #825 - Haven't looked into how awkward it is to do, but really I think we'd want to monkeypatch asyncio's socket unwrapping behaviour, so that we can reliably call .wait_closed(...) without it potentially hanging.
Can anyone on Windows, running Python 3.8+ confirm what currently happens when running this?...
import httpx
import asyncio
async def main():
async with httpx.AsyncClient() as client:
r = await client.get("https://login.microsoftonline.com/")
print(r)
asyncio.run(main(), debug=True)
Trying to verify if we're still exposed to this issue. (I guess we are but 🤷♂️)
Using:
I have a httpx._exceptions.ConnectTimeout even with timeout=60 or http2=True.
@dalf - Thanks!
Also uh... that's not at all what I was expecting / looking for. 🙃🙃🙃
Does that replicate on other URLs?...
"https://www.google.com/""https://www.example.org/"Does removing the debug=True change anything?
Does it work okay in the sync version?...
import httpx
def main():
with httpx.Client() as client:
r = client.get("https://login.microsoftonline.com/")
print(r)
main()
Or with trio?... (Use pip install trio)
import httpx
import trio
async def main():
async with httpx.AsyncClient() as client:
r = await client.get("https://login.microsoftonline.com/")
print(r)
trio.run(main)
Maybe my report is irrelevant, I'm not familiar with the Python Windows environment:
import httpx
import requests
r_requests = requests.get('https://www.google.com')
r_httpx = httpx.get('https://www.google.com')
raises ConnectTimeout: _ssl.c:1106: The handshake operation timed out🤨
That's pretty relevant. But just super surprising.
Are you able to double double check you've got fully up to date httpx and httpcore versions installed?
Is anyone else able to confirm?
To do the test, I've installed Python from https://www.python.org/ftp/python/3.8.5/python-3.8.5.exe (it wasn't installed before), and just pip install httpx[http2]
pip freeze shows
httpcore==0.10.2
httpx==0.14.1
I think a test from someone else would be helpful.
I ran some tests:
https://github.com/import httpx
import requests
resp = httpx.get('https://github.com/')
print('httpx', resp)
resp = requests.get('https://github.com/')
print('requests', resp)
results:
httpx <Response [200 OK]>
requests <Response [200]>
asyncio,import httpx
import asyncio
async def main():
async with httpx.AsyncClient() as client:
r = await client.get("https://github.com/")
print(r)
asyncio.run(main(), debug=True)
results:
<Response [200 OK]>
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x0000024774DEA0D0>
Traceback (most recent call last):
File "D:\Programs\Python38\lib\asyncio\proactor_events.py", line 116, in __del__
self.close()
File "D:\Programs\Python38\lib\asyncio\proactor_events.py", line 108, in close
self._loop.call_soon(self._call_connection_lost, None)
File "D:\Programs\Python38\lib\asyncio\base_events.py", line 719, in call_soon
self._check_closed()
File "D:\Programs\Python38\lib\asyncio\base_events.py", line 508, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
trio, works fine:import httpx
import trio
async def main():
async with httpx.AsyncClient() as client:
r = await client.get("https://github.com/")
print(r)
trio.run(main)
results:
<Response [200 OK]>
https://login.microsoftonline.com/import httpx
import requests
resp = httpx.get('https://login.microsoftonline.com/')
print('httpx', resp)
resp = requests.get('https://login.microsoftonline.com/')
print('requests', resp)
results:
requests always succeed, httpx sometimes failed with
ConnectTimeout
requests <Response [200]>
Traceback (most recent call last):
File "e:\projects\pycharm\httpx\httpx\_exceptions.py", line 342, in map_exceptions
yield
File "e:\projects\pycharm\httpx\httpx\_client.py", line 798, in _send_single_request
) = transport.request(
File "e:\projects\pycharm\httpcore\httpcore\_sync\connection_pool.py", line 188, in request
response = connection.request(
File "e:\projects\pycharm\httpcore\httpcore\_sync\connection.py", line 83, in request
self.socket = self._open_socket(timeout)
File "e:\projects\pycharm\httpcore\httpcore\_sync\connection.py", line 104, in _open_socket
return self.backend.open_tcp_stream(
File "e:\projects\pycharm\httpcore\httpcore\_backends\sync.py", line 144, in open_tcp_stream
return SyncSocketStream(sock=sock)
File "D:\Programs\Python38\lib\contextlib.py", line 131, in __exit__
self.gen.throw(type, value, traceback)
File "e:\projects\pycharm\httpcore\httpcore\_exceptions.py", line 12, in map_exceptions
raise to_exc(exc) from None
httpcore.ConnectTimeout: _ssl.c:1106: The handshake operation timed out
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File ".\sync.py", line 12, in <module>
resp = httpx.get(url)
File "e:\projects\pycharm\httpx\httpx\_api.py", line 174, in get
return request(
File "e:\projects\pycharm\httpx\httpx\_api.py", line 89, in request
return client.request(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 673, in request
return self.send(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 703, in send
response = self._send_handling_redirects(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 732, in _send_handling_redirects
response = self._send_handling_auth(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 769, in _send_handling_auth
response = self._send_single_request(request, timeout)
File "e:\projects\pycharm\httpx\httpx\_client.py", line 792, in _send_single_request
(
File "D:\Programs\Python38\lib\contextlib.py", line 131, in __exit__
self.gen.throw(type, value, traceback)
File "e:\projects\pycharm\httpx\httpx\_exceptions.py", line 359, in map_exceptions
raise mapped_exc(message, **kwargs) from exc # type: ignore
httpx.ConnectTimeout: _ssl.c:1106: The handshake operation timed out
asyncioimport httpx
import asyncio
async def main():
async with httpx.AsyncClient() as client:
r = await client.get("https://login.microsoftonline.com/")
print(r)
asyncio.run(main(), debug=True)
results in three different types error(in an abritary way):
Error 1: Request succeed but with RuntimeError
<Response [200 OK]>
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x000001AB2649A0D0>
Traceback (most recent call last):
File "D:\Programs\Python38\lib\asyncio\proactor_events.py", line 116, in __del__
self.close()
File "D:\Programs\Python38\lib\asyncio\proactor_events.py", line 108, in close
self._loop.call_soon(self._call_connection_lost, None)
File "D:\Programs\Python38\lib\asyncio\base_events.py", line 719, in call_soon
self._check_closed()
File "D:\Programs\Python38\lib\asyncio\base_events.py", line 508, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x000001AB2649A0D0>
Traceback (most recent call last):
File "D:\Programs\Python38\lib\asyncio\proactor_events.py", line 116, in __del__
self.close()
File "D:\Programs\Python38\lib\asyncio\proactor_events.py", line 108, in close
self._loop.call_soon(self._call_connection_lost, None)
File "D:\Programs\Python38\lib\asyncio\base_events.py", line 719, in call_soon
self._check_closed()
File "D:\Programs\Python38\lib\asyncio\base_events.py", line 508, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Error 2: ConnectTimeout
Traceback (most recent call last):
File "e:\projects\pycharm\httpx\httpx\_exceptions.py", line 342, in map_exceptions
yield
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1402, in _send_single_request
) = await transport.request(
File "e:\projects\pycharm\httpcore\httpcore\_async\connection_pool.py", line 188, in request
response = await connection.request(
File "e:\projects\pycharm\httpcore\httpcore\_async\connection.py", line 83, in request
self.socket = await self._open_socket(timeout)
File "e:\projects\pycharm\httpcore\httpcore\_async\connection.py", line 104, in _open_socket
return await self.backend.open_tcp_stream(
File "e:\projects\pycharm\httpcore\httpcore\_backends\auto.py", line 40, in open_tcp_stream
return await self.backend.open_tcp_stream(
File "e:\projects\pycharm\httpcore\httpcore\_backends\asyncio.py", line 240, in open_tcp_stream
File "D:\Programs\Python38\lib\contextlib.py", line 131, in __exit__
self.gen.throw(type, value, traceback)
File "e:\projects\pycharm\httpcore\httpcore\_exceptions.py", line 12, in map_exceptions
raise to_exc(exc) from None
httpcore.ConnectTimeout
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File ".\async_test.py", line 13, in <module>
asyncio.run(main(), debug=True)
File "D:\Programs\Python38\lib\asyncio\runners.py", line 43, in run
return loop.run_until_complete(main)
File "D:\Programs\Python38\lib\asyncio\base_events.py", line 616, in run_until_complete
return future.result()
File ".\async_test.py", line 10, in main
r = await client.get("https://login.microsoftonline.com/")
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1441, in get
return await self.request(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1274, in request
response = await self.send(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1305, in send
response = await self._send_handling_redirects(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1334, in _send_handling_redirects
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1371, in _send_handling_auth
response = await self._send_single_request(request, timeout)
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1396, in _send_single_request
(
File "D:\Programs\Python38\lib\contextlib.py", line 131, in __exit__
self.gen.throw(type, value, traceback)
File "e:\projects\pycharm\httpx\httpx\_exceptions.py", line 359, in map_exceptions
raise mapped_exc(message, **kwargs) from exc # type: ignore
httpx.ConnectTimeout
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x000001E4DAFBA0D0>
Traceback (most recent call last):
File "D:\Programs\Python38\lib\asyncio\proactor_events.py", line 116, in __del__
File "D:\Programs\Python38\lib\asyncio\proactor_events.py", line 108, in close
File "D:\Programs\Python38\lib\asyncio\base_events.py", line 719, in call_soon
File "D:\Programs\Python38\lib\asyncio\base_events.py", line 508, in _check_closed
RuntimeError: Event loop is closed
Error 3: ReadTimeout
Traceback (most recent call last):
File "e:\projects\pycharm\httpx\httpx\_exceptions.py", line 342, in map_exceptions
yield
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1402, in _send_single_request
) = await transport.request(
File "e:\projects\pycharm\httpcore\httpcore\_async\connection_pool.py", line 188, in request
response = await connection.request(
File "e:\projects\pycharm\httpcore\httpcore\_async\connection.py", line 96, in request
return await self.connection.request(method, url, headers, stream, timeout)
File "e:\projects\pycharm\httpcore\httpcore\_async\http11.py", line 73, in request
) = await self._receive_response(timeout)
File "e:\projects\pycharm\httpcore\httpcore\_async\http11.py", line 130, in _receive_response
event = await self._receive_event(timeout)
File "e:\projects\pycharm\httpcore\httpcore\_async\http11.py", line 160, in _receive_event
data = await self.socket.read(self.READ_NUM_BYTES, timeout)
File "e:\projects\pycharm\httpcore\httpcore\_backends\asyncio.py", line 134, in read
return await asyncio.wait_for(
File "D:\Programs\Python38\lib\contextlib.py", line 131, in __exit__
self.gen.throw(type, value, traceback)
File "e:\projects\pycharm\httpcore\httpcore\_exceptions.py", line 12, in map_exceptions
raise to_exc(exc) from None
httpcore.ReadTimeout
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File ".\async_test.py", line 13, in <module>
asyncio.run(main(), debug=True)
File "D:\Programs\Python38\lib\asyncio\runners.py", line 43, in run
return loop.run_until_complete(main)
File "D:\Programs\Python38\lib\asyncio\base_events.py", line 616, in run_until_complete
return future.result()
File ".\async_test.py", line 10, in main
r = await client.get("https://login.microsoftonline.com/")
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1441, in get
return await self.request(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1274, in request
response = await self.send(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1305, in send
response = await self._send_handling_redirects(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1334, in _send_handling_redirects
response = await self._send_handling_auth(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1371, in _send_handling_auth
response = await self._send_single_request(request, timeout)
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1396, in _send_single_request
(
File "D:\Programs\Python38\lib\contextlib.py", line 131, in __exit__
self.gen.throw(type, value, traceback)
File "e:\projects\pycharm\httpx\httpx\_exceptions.py", line 359, in map_exceptions
raise mapped_exc(message, **kwargs) from exc # type: ignore
httpx.ReadTimeout
Fatal error on SSL transport
protocol: <asyncio.sslproto.SSLProtocol object at 0x00000222F9D43310>
transport: <_ProactorSocketTransport fd=372 read=<_OverlappedFuture cancelled created at D:\Programs\Python38\lib\asyncio\windows_events.py:461>>
Traceback (most recent call last):
File "D:\Programs\Python38\lib\asyncio\sslproto.py", line 685, in _process_write_backlog
self._transport.write(chunk)
File "D:\Programs\Python38\lib\asyncio\proactor_events.py", line 359, in write
self._loop_writing(data=bytes(data))
File "D:\Programs\Python38\lib\asyncio\proactor_events.py", line 395, in _loop_writing
self._write_fut = self._loop._proactor.send(self._sock, data)
AttributeError: 'NoneType' object has no attribute 'send'
Exception ignored in: <function _SSLProtocolTransport.__del__ at 0x00000222F9D02DC0>
Traceback (most recent call last):
File "D:\Programs\Python38\lib\asyncio\sslproto.py", line 322, in __del__
File "D:\Programs\Python38\lib\asyncio\sslproto.py", line 317, in close
File "D:\Programs\Python38\lib\asyncio\sslproto.py", line 594, in _start_shutdown
File "D:\Programs\Python38\lib\asyncio\sslproto.py", line 599, in _write_appdata
File "D:\Programs\Python38\lib\asyncio\sslproto.py", line 707, in _process_write_backlog
File "D:\Programs\Python38\lib\asyncio\sslproto.py", line 721, in _fatal_error
File "D:\Programs\Python38\lib\asyncio\proactor_events.py", line 151, in _force_close
File "D:\Programs\Python38\lib\asyncio\base_events.py", line 719, in call_soon
File "D:\Programs\Python38\lib\asyncio\base_events.py", line 508, in _check_closed
RuntimeError: Event loop is closed
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x00000222F9D6A0D0>
Traceback (most recent call last):
File "D:\Programs\Python38\lib\asyncio\proactor_events.py", line 116, in __del__
File "D:\Programs\Python38\lib\asyncio\proactor_events.py", line 108, in close
File "D:\Programs\Python38\lib\asyncio\base_events.py", line 719, in call_soon
File "D:\Programs\Python38\lib\asyncio\base_events.py", line 508, in _check_closed
RuntimeError: Event loop is closed
Sometimes succeed, sometimes failed with
ReadTimeout or ConnectTimeout
ReadTimeout:
Traceback (most recent call last):
File "e:\projects\pycharm\httpx\httpx\_exceptions.py", line 342, in map_exceptions
yield
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1402, in _send_single_request
) = await transport.request(
File "e:\projects\pycharm\httpcore\httpcore\_async\connection_pool.py", line 188, in request
response = await connection.request(
File "e:\projects\pycharm\httpcore\httpcore\_async\connection.py", line 96, in request
return await self.connection.request(method, url, headers, stream, timeout)
File "e:\projects\pycharm\httpcore\httpcore\_async\http11.py", line 73, in request
) = await self._receive_response(timeout)
File "e:\projects\pycharm\httpcore\httpcore\_async\http11.py", line 130, in _receive_response
event = await self._receive_event(timeout)
File "e:\projects\pycharm\httpcore\httpcore\_async\http11.py", line 160, in _receive_event
data = await self.socket.read(self.READ_NUM_BYTES, timeout)
File "e:\projects\pycharm\httpcore\httpcore\_backends\trio.py", line 63, in read
return await self.stream.receive_some(max_bytes=n)
File "D:\Programs\Python38\lib\contextlib.py", line 131, in __exit__
self.gen.throw(type, value, traceback)
File "e:\projects\pycharm\httpcore\httpcore\_exceptions.py", line 12, in map_exceptions
raise to_exc(exc) from None
httpcore.ReadTimeout
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File ".\async_test-trio.py", line 12, in <module>
trio.run(main)
File "D:\Programs\Python38\lib\site-packages\trio\_core\_run.py", line 1896, in run
raise runner.main_task_outcome.error
File ".\async_test-trio.py", line 9, in main
r = await client.get("https://login.microsoftonline.com/")
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1441, in get
return await self.request(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1274, in request
response = await self.send(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1305, in send
response = await self._send_handling_redirects(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1334, in _send_handling_redirects
response = await self._send_handling_auth(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1371, in _send_handling_auth
response = await self._send_single_request(request, timeout)
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1396, in _send_single_request
(
File "D:\Programs\Python38\lib\contextlib.py", line 131, in __exit__
self.gen.throw(type, value, traceback)
File "e:\projects\pycharm\httpx\httpx\_exceptions.py", line 359, in map_exceptions
raise mapped_exc(message, **kwargs) from exc # type: ignore
httpx.ReadTimeout
ConnectTimeout:
Traceback (most recent call last):
File "e:\projects\pycharm\httpx\httpx\_exceptions.py", line 342, in map_exceptions
yield
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1402, in _send_single_request
) = await transport.request(
File "e:\projects\pycharm\httpcore\httpcore\_async\connection_pool.py", line 188, in request
response = await connection.request(
File "e:\projects\pycharm\httpcore\httpcore\_async\connection.py", line 83, in request
self.socket = await self._open_socket(timeout)
File "e:\projects\pycharm\httpcore\httpcore\_async\connection.py", line 104, in _open_socket
return await self.backend.open_tcp_stream(
File "e:\projects\pycharm\httpcore\httpcore\_backends\auto.py", line 40, in open_tcp_stream
return await self.backend.open_tcp_stream(
File "e:\projects\pycharm\httpcore\httpcore\_backends\trio.py", line 168, in open_tcp_stream
return SocketStream(stream=stream)
File "D:\Programs\Python38\lib\contextlib.py", line 131, in __exit__
self.gen.throw(type, value, traceback)
File "e:\projects\pycharm\httpcore\httpcore\_exceptions.py", line 12, in map_exceptions
raise to_exc(exc) from None
httpcore.ConnectTimeout
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File ".\async_test-trio.py", line 12, in <module>
trio.run(main)
File "D:\Programs\Python38\lib\site-packages\trio\_core\_run.py", line 1896, in run
raise runner.main_task_outcome.error
File ".\async_test-trio.py", line 9, in main
r = await client.get("https://login.microsoftonline.com/")
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1441, in get
return await self.request(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1274, in request
response = await self.send(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1305, in send
response = await self._send_handling_redirects(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1334, in _send_handling_redirects
response = await self._send_handling_auth(
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1371, in _send_handling_auth
response = await self._send_single_request(request, timeout)
File "e:\projects\pycharm\httpx\httpx\_client.py", line 1396, in _send_single_request
(
File "D:\Programs\Python38\lib\contextlib.py", line 131, in __exit__
self.gen.throw(type, value, traceback)
File "e:\projects\pycharm\httpx\httpx\_exceptions.py", line 359, in map_exceptions
raise mapped_exc(message, **kwargs) from exc # type: ignore
httpx.ConnectTimeout
Using:
Most helpful comment
The workaround is to use the selector event loop like this:
The following from the documentation will not resolve this issue (for some reason):