Message132666
| Author |
jnoller |
| Recipients |
Albert.Strasheim, aljungberg, asksol, bquinlan, gdb, hongqn, jnoller, pitrou, vlasovskikh, vstinner |
| Date |
2011年03月31日.13:13:15 |
| SpamBayes Score |
1.3138713e-07 |
| Marked as misclassified |
No |
| Message-id |
<BANLkTinwHd9ndC_dJf46tqZ_zEyWVMO-PQ@mail.gmail.com> |
| In-reply-to |
<1301576730.65.0.264943424486.issue9205@psf.upfronthosting.co.za> |
| Content |
On Thu, Mar 31, 2011 at 9:05 AM, Antoine Pitrou <report@bugs.python.org> wrote:
>
> Antoine Pitrou <pitrou@free.fr> added the comment:
>
> Possible plan for POSIX, where a connection uses a pipe() or socketpair(): exploit the fact that an endpoint becomes ready for reading (indicating EOF) when the other endpoint is closed:
>
>>>> r, w = os.pipe()
>>>> select.select([r], [], [r], 0)
> ([], [], [])
>>>> os.close(w)
>>>> select.select([r], [], [r], 0)
> ([4], [], [])
>
>>>> a, b = socket.socketpair()
>>>> select.select([b], [], [b], 0)
> ([], [], [])
>>>> a.close()
>>>> select.select([b], [], [b], 0)
> ([<socket.socket object, fd=8, family=1, type=1, proto=0>], [], [])
>
> So, each Process could have a sentinel fd in the parent process, which becomes ready when the process exits. These sentinel fds can be used in the various select() calls underlying Queue.get().
>
> (I don't understand why _multiprocessing/socket_connection.c in written in C. Rewriting it in Python would make improvements much easier)
I concur with you. The only reason it is in C is legacy; I don't see
an immediate reason why it should continue to be that way |
|