Search code examples
pythonudpshutdownsocketserver

In python, how to get a UDPServer to shutdown itself?


I've created a class for a server with the declaration:

class myServer(socketserver.BaseRequestHandler):  
    def handle(self):  
        pass

And started it with:

someServer = socketserver.UDPServer((HOST, PORT), myServer)  
someServer.serve_forever()

My question is: how can I get the server to shutdown itself? I've seen it has a base class (of a base class) called BaseServer with a shutdown method. It can be called on someServer with someServer.shutdown() but this is from the outside of the server itself.


Solution

  • By using threads. Serving by one thread and going via another after your timeout. Consider this working example. Modify it for your UDPServer

    import threading
    import time
    import SimpleHTTPServer
    import SocketServer
    
    PORT = 8000
    Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
    httpd = SocketServer.TCPServer(("", PORT), Handler)
    
    def worker():
    
        # minimal web server.  serves files relative to the
        print "serving at port", PORT
        httpd.serve_forever()
    
    def my_service():
        time.sleep(3)
        print "I am going down"
        httpd.shutdown()
    
    h = threading.Thread(name='httpd', target=worker)
    t = threading.Thread(name='timer', target=my_service)
    
    h.start()
    t.start()