Josiah Carlson added the comment:

Had some time to work on this today.

I was missing something in my earlier versions of the code, and have managed to 
get overlapped IOs to work, so at least I'm not quite so far behind the dozen 
or so core developers who know more about the Windows pieces than I do. 
Richard, thank you for the post, I wasn't looking hard enough for how to get 
overlapped IOs to work, and your message made me look harder.

On Linux, it is trivial to support the blocking communicate() and non-blocking 
additions. There's only one weirdness, and that's the fcntl bit flipping during 
write.

On Windows, it's not all that difficult to switch to using overlapped IOs for 
*all* writes, and maybe even for communicate()-based reads, which would remove 
the need for threads. Ironically enough, non-blocking reads actually *don't* 
require overlapped IO thanks to PeekNamedPipe, which could even be used to cut 
the number of extra threads from 2 to 1 in communicate().

Now that I've got it working, I can do one of the following (from least changes 
to the most):
1. Add a "nonblocking" flag, which pre-flips the fcntl bit in Linux and uses 
overlapped IO on writes in Windows - this would be documented to remove the 
ability to call communicate()
2. As an alternative to #1, I can create a new class that lacks the 
communicate() method and adds the non-blocking methods
3. Gut/rewrite the Windows-based communicate() function to use overlapped IO on 
everything, removing the threads, and making it at least superficially like 
Linux (prepare your overlapped IO, then use WaitForMultipleObjects() to 
multiplex), while also adding the non-blocking methods

Unless someone brings up an important counterpoint, I'll work on #3 tonight or 
tomorrow evening to get an initial code/test patch, with docs coming shortly 
after (if not immediately).

----------

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

Reply via email to