How to stop BaseHTTPServer.serve_forever() in a BaseHTTPRequestHandler subclass?

后端 未结 10 1217
渐次进展
渐次进展 2020-12-01 04:53

I am running my HTTPServer in a separate thread (using the threading module which has no way to stop threads...) and want to stop serving requests when the main

10条回答
  •  忘掉有多难
    2020-12-01 05:56

    import http.server
    import socketserver
    import socket as sck
    import os
    import threading
    
    
    class myserver:
        def __init__(self, PORT, LOCATION):
            self.thrd = threading.Thread(None, self.run)
            self.Directory = LOCATION
            self.Port = PORT
            hostname = sck.gethostname()
            ip_address = sck.gethostbyname(hostname)
            self.url = 'http://' + ip_address + ':' + str(self.Port)
            Handler = http.server.SimpleHTTPRequestHandler
            self.httpd = socketserver.TCPServer(("", PORT), Handler)
            print('Object created, use the start() method to launch the server')
        def run(self):
            print('listening on: ' + self.url )
            os.chdir(self.Directory)
            print('myserver object started')        
            print('Use the objects stop() method to stop the server')
            self.httpd.serve_forever()
            print('Quit handling')
    
            print('Sever stopped')
            print('Port ' + str(self.Port) + ' should be available again.')
    
    
        def stop(self):
            print('Stopping server')
            self.httpd.shutdown()
            self.httpd.server_close()
            print('Need just one more request before shutting down'
    
    
        def start(self):
            self.thrd.start()
    
    def help():
        helpmsg = '''Create a new server-object by initialising
    NewServer = webserver3.myserver(Port_number, Directory_String)
    Then start it using NewServer.start() function
    Stop it using NewServer.stop()'''
        print(helpmsg)
    

    Not a experience python programmer, just wanting to share my comprehensive solution. Mostly based on snippets here and there. I usually import this script in my console and it allows me to set up multiple servers for different locations using their specific ports, sharing my content with other devices on the network.

提交回复
热议问题