saghul / aiodns

Simple DNS resolver for asyncio

Home Page:https://pypi.python.org/pypi/aiodns

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NotImplementedError on Windows

oyarsa opened this issue · 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.

commented

Same problem in CPython3.9 on windows10.

commented

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!

WindowsSelectorEventLoopPolicy was added in 3.7

In 3.8 the default event loop for windows was changed to ProactorEventLoop. At which point this became necessary.

Seems this was already discussed in #78