NotImplementedError on Windows
oyarsa opened this issue · 10 comments
I tried running the example code on the README, and got this error:
From cffi callback <function _sock_state_cb at 0x00000240DB1BEC10>:
Traceback (most recent call last):
File "C:\Users\italo\Google Drive\Code\Projects\email-lists\env\lib\site-packages\pycares\__init__.py", line 91, in _sock_state_cb
sock_state_cb(socket_fd, readable, writable)
File "C:\Users\italo\Google Drive\Code\Projects\email-lists\env\lib\site-packages\aiodns\__init__.py", line 104, in _sock_state_cb
self.loop.add_reader(fd, self._handle_event, fd, READ)
File "C:\Users\italo\AppData\Local\Programs\Python\Python38\lib\asyncio\events.py", line 501, in add_reader
raise NotImplementedError
NotImplementedError
The program hung after that. After interrupting it, this is the traceback:
Traceback (most recent call last):
File "a.py", line 11, in <module>
result = loop.run_until_complete(coro)
File "C:\Users\italo\AppData\Local\Programs\Python\Python38\lib\asyncio\base_events.py", line 603, in run_until_complete
self.run_forever()
File "C:\Users\italo\AppData\Local\Programs\Python\Python38\lib\asyncio\windows_events.py", line 316, in run_forever
super().run_forever()
File "C:\Users\italo\AppData\Local\Programs\Python\Python38\lib\asyncio\base_events.py", line 570, in run_forever
self._run_once()
File "C:\Users\italo\AppData\Local\Programs\Python\Python38\lib\asyncio\base_events.py", line 1823, in _run_once
event_list = self._selector.select(timeout)
File "C:\Users\italo\AppData\Local\Programs\Python\Python38\lib\asyncio\windows_events.py", line 430, in select
self._poll(timeout)
File "C:\Users\italo\AppData\Local\Programs\Python\Python38\lib\asyncio\windows_events.py", line 779, in _poll
status = _overlapped.GetQueuedCompletionStatus(self._iocp, ms)
KeyboardInterrupt
This is on Windows 10 build 2004 with Python 3.8.5 and aiodns 2.0.0.
Having the same problem on windows. So the workaround would be to run this under WSL.
Same problem in CPython3.9 on windows10.
Exactly the same problem on Python 3.9.4 on Windows 10 using the example program. Any suggestions?
I'm having the same issue.
Still got problem on Windows 10 with python3.9.5 and Windows 11 with python 3.10
c-ares, what is used underneath, requires a readyness style API, which is not supported on Windows unless you are using a SelectorEventLoop implementation: https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.SelectorEventLoop
Okay, thanks. By the way, I made an improvement to let other users know about this issue, and merge it if you think it's good. #105
In user code, it can be solved by adding
if sys.platform == 'win32':
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
Maybe it should be part of the example?
Oh that's nice! When did they add to Python?
Happy to take a PR if you're up for it!