On Mar 11, 12:28 pm, David George wrote: > On 2009-03-11 04:36:29 +0000, "Mark Tolonen" <metolone+gm...@gmail.com> said: > > > > > > > "David George" <d...@eatmyhat.co.uk> wrote in message > >news:00150e67$0$27956$c3e8...@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 -- http://mail.python.org/mailman/listinfo/python-list