socketserver question

Bryan bryanjugglercryptographer at yahoo.com
Sun Jan 8 06:11:14 EST 2012


K Richard Pixley wrote:
[...]
> The doc says server.shutdown(), but if I call self.server.shutdown()
> from within handler.handle(), I seem to get a deadlock, which is exactly
> what I'd expect in a single threaded system with no way to "signal" the
> server.server_forever() loop which is several frames up the stack.

Well, it's documented behavior, but not what I would have expected.
Seems to go out of its way to deadlock. Stopping the main loop from
inside a request is perfectly reasonable thing to want to do, and
single-threaded GUI's do it all the time.

It's not an up-the-stack problem. shutdown() sets a flag that will
cause the loop not to repeat, but then calls wait() for an event that
won't be signaled until the loop exits, breaking the single-threaded
case. It's bad design.

Given the library class is as it is, one solution (untested) is to
relax being single-threader for just a bit.

    import thread
    thread.start_new_thread(server.shutdown, ())

--
--Bryan




More information about the Python-list mailing list