STINNER Victor <vstin...@redhat.com> added the comment:

Ben:
> Concretely, this is a concern for Tornado (which requires add_reader()) and 
> applications in the scientific python community (including Jupyter) which 
> depend on it.

If you need add_reader/add_writer in Python 3.8, you can switch the default 
event loop to selector at the beginning of your application:

if sys.platform == 'win32':
  asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())


Yury:
> If there's no native API for that, I guess we can spawn a thread with a 
> 'select()' call to emulate this API?

There is no native API because IOCP design is to run an asynchronous read/write 
and then wait for  its completion. Unix select() has the opposite design: check 
if a file descriptor is read for read/write.

Reimplementing add_reader/add_writer using a single select() call in a thread 
sounds like a good idea, but we have to make sure that it can be stopped 
whenever using a dedicated "self-pipe" (to awake the blocked select(), so 
loop.close() can stop this thread.

See attached proof-of-concept: selector_thread.py: run a selector in a 
separated thread which pass pack events to the loop using call_soon().

I would prefer to use a single selector to better scale with the number of FD.

Note: On Windows, select() only supports sockets.

Note: select.select() may be extended to support more than 512 sockets on 
Windows, see bpo-28708 :-)


Yury:
> Another question: if we fix this, would you allow this to go in beta2/3?  
> Strictly speaking it's going to be a new functionality.

It's a new feature, so it can wait for Python 3.9 :-)

I don't see any regression here, as soon as you can opt-in for 
SelectorEventLoop.

----------
Added file: https://bugs.python.org/file48434/selector_thread.py

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue37373>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to