Stopping SocketServer on Python 2.5

Falcolas garrickp at gmail.com
Wed Mar 11 15:02:26 EDT 2009


On Mar 11, 12:28 pm, David George wrote:
> On 2009-03-11 04:36:29 +0000, "Mark Tolonen" <metolone+gm... at gmail.com> said:
>
>
>
>
>
> > "David George" <d... at eatmyhat.co.uk> wrote in message
> >news:00150e67$0$27956$c3e8da3 at news.astraweb.com...
> >> Hi guys,
>
> >> I've been developing some code for a university project using Python.
> >> We've been working on an existing codebase, cleaning it up and removing
> >> dead wood.
>
> >> We decided to make some changes to internal message handling by using a
> >> SocketServer, which worked great when we were using 2.6, as we could
> >> simply call its shutdown() method when we wanted to stop it from
> >> 'serving forever'.
>
> >> Unfortunately, we've now needed to downgrade to python 2.5 to
> >> accomodate the libtorrent python bindings we need to use as part of the
> >> project.
>
> >> So, my question is, is there any way to stop a SocketServer that's been
> >> told to server forever in python 2.5?
>
> > Sure, derive a class from one of the classes in SocketServer, and
> > override the methods that implement the shutdown behavior in 2.6.
>
> > -Mark
>
> Based on what you guys have said i've had a look at the code for
> serve_forever() in both 2.5 and 2.6, and tried to create my own derived
> class in this manner:
>
> class MBThreadingTCPServer(SocketServer.ThreadingTCPServer):
>
>     def __init__(self, address_tuple, handler):
>         SocketServer.ThreadingTCPServer.__init__(self, address_tuple, handler)
>         self.__serving = True
>
>     def serve_forever(self):
>         while self.__serving:
>             SocketServer.ThreadingTCPServer.handle_request(self)
>
>     def shutdown(self):
>         self.__serving = False
>
> Don't worry about the MB thing, it's just related to the name of our project.
>
> I don't think i've done this right, but i've tried to implement the
> serve_forever() functionality in my derived class, and also add the
> shutdown() method so i can stop it.
>
> Does this appear to be the right way to do things?
>
> Cheers,
>
> Dave

More or less what I would do, though you should be able to call
self.handle_request. It's worth noting that handle_request generally
calls a blocking socket method, which means your self.__serving check
only happens the next time it handles a request.

~G



More information about the Python-list mailing list