<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Dec 19, 2012, at 2:14 PM, anatoly techtonik <<a href="mailto:techtonik@gmail.com">techtonik@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Dec 9, 2012 at 7:14 AM, Glyph <span dir="ltr"><<a href="mailto:glyph@twistedmatrix.com" target="_blank">glyph@twistedmatrix.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word"><div class="im">On Dec 7, 2012, at 5:10 PM, anatoly techtonik <<a href="mailto:techtonik@gmail.com" target="_blank">techtonik@gmail.com</a>> wrote:<br>

<div><br><blockquote type="cite"><blockquote class="gmail_quote" style="font-family:Menlo;font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

What about reading from other file descriptors?  subprocess.Popen allows arbitrary file descriptors to be used.  Is there any provision here for reading and writing non-blocking from or to those?</blockquote><div style="font-family:Menlo;font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">

<br></div><div style="font-family:Menlo;font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">

On Windows it is WriteFile/ReadFile and PeekNamedPipe. On Linux it is select. Of course a test is needed, but why it should not just work?<br></div></blockquote></div><div><br></div></div><div>This is exactly why the provision needs to be made explicitly.</div>

<div><br></div><div>On Windows it is WriteFile and ReadFile and PeekNamedPipe - unless the handle is a socket in which case it needs to be WSARecv.  Or maybe it's some other weird thing - like, maybe a mailslot - and you need to call a different API.</div>

</div></blockquote><div><br></div><div style="">IIRC on Windows there is no socket descriptor that can be used as a file descriptor. Seems reasonable to limit the implementation to standard file descriptors in this platform.</div></div></div></div></blockquote><div><br></div><div>Via the documentation of ReadFile: <<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa365467(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/windows/desktop/aa365467(v=vs.85).aspx</a>></div><div><br></div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div>hFile [in]</div></div></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div>A handle to the device (for example, a file, file stream, physical disk, volume, console buffer, tape drive, <b>socket</b>, communications resource, mailslot, or pipe). (...) For asynchronous read operations, hFile can be any handle that is opened with the FILE_FLAG_OVERLAPPED flag by the CreateFilefunction, or a <b>socket handle returned by the socket or accept function</b>.</div></div></blockquote></blockquote><div><br></div>(emphasis mine).<div><br></div><div>So, you can treat sockets as regular files in some contexts, and not in others.  Of course there are other reasons to use WSARecv instead of ReadFile sometimes, which is why there are multiple functions.<br><div><div><br></div><blockquote type="cite"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; "><div style="word-wrap:break-word"><div>On *nix it really shouldn't be select.  select cannot wait upon a file descriptor whose <i>value</i> is greater than FD_SETSIZE, which means it sets a hard (and small) limit on the number of things that a process which wants to use this facility can be doing.</div>

</div></blockquote><div style=""><br></div><div style="">I didn't know that. Should a note be added to <a href="http://docs.python.org/2/library/select">http://docs.python.org/2/library/select</a> ?</div></div></div></div></blockquote><div><br></div><div>The note that should be added there is simply "you should know how the select system call works in C if you want to use this module".</div><br><blockquote type="cite"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div style="">I also thought that poll acts like, well, a polling function - eating 100% CPU while looping over inputs over and over checking if there is something to react to.</div></div></div></div></blockquote><div><br></div><div>Nope.  Admittedly, the naming is slightly misleading.</div><div><br></div><blockquote type="cite"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; "><div style="word-wrap:break-word"><div>On the other hand, if you hard-code another arbitrary limit like this into the stdlib subprocess module, it will just be another great reason why Twisted's spawnProcess is the best and everyone should use it instead, so be my guest ;-).</div>

</div></blockquote><div><br></div><div style="">spawnProcess requires a reactor. This PEP is an alternative for the proponents of green energy. =)</div></div></div></div>
</blockquote><br></div><div>Do you know what happens when you take something that is supposed to be happening <i>inside</i> a reactor, and then move it <i>outside</i> a reactor?  It's not called "green energy", it's called "a bomb" ;-).</div><div><br></div><div>-glyph</div><br></div></body></html>