在多个端口上处理打开 python http 服务器的更好方法

Better way of handing opening python http server on multiple ports

我需要在 10 个端口上打开 python http 服务器,这是我当前的代码。

self.server_thread = Thread(target=self.start_web_server)
        self.httpd = BaseHTTPServer.HTTPServer((HOST_NAME, PORT_NUMBER[0]), MyHandler)
        self.httpd1 = BaseHTTPServer.HTTPServer((HOST_NAME, PORT_NUMBER[1]), MyHandler)
        self.httpd2 = BaseHTTPServer.HTTPServer((HOST_NAME, PORT_NUMBER[2]), MyHandler)
        self.httpd3 = BaseHTTPServer.HTTPServer((HOST_NAME, PORT_NUMBER[3]), MyHandler)
        self.httpd4 = BaseHTTPServer.HTTPServer((HOST_NAME, PORT_NUMBER[4]), MyHandler)
        self.httpd5 = BaseHTTPServer.HTTPServer((HOST_NAME, PORT_NUMBER[5]), MyHandler)
        self.httpd6 = BaseHTTPServer.HTTPServer((HOST_NAME, PORT_NUMBER[6]), MyHandler)
        self.httpd7 = BaseHTTPServer.HTTPServer((HOST_NAME, PORT_NUMBER[7]), MyHandler)
        self.httpd8 = BaseHTTPServer.HTTPServer((HOST_NAME, PORT_NUMBER[8]), MyHandler)
        self.httpd9 = BaseHTTPServer.HTTPServer((HOST_NAME, PORT_NUMBER[9]), MyHandler)

我想知道是否有更好的方法将其转换为 for 循环。

def wait_for_message(self):
        print time.asctime(), "Server Starts"
        self.httpd.serve_forever()
        self.httpd1.serve_forever()
        self.httpd2.serve_forever()
        self.httpd3.serve_forever()
        self.httpd4.serve_forever()
        self.httpd5.serve_forever()
        self.httpd6.serve_forever()
        self.httpd7.serve_forever()
        self.httpd8.serve_forever()
        self.httpd9.serve_forever()

    def stop(self):
        self.httpd.shutdown()
        self.httpd1.shutdown()
        self.httpd2.shutdown()
        self.httpd3.shutdown()
        self.httpd4.shutdown()
        self.httpd5.shutdown()
        self.httpd6.shutdown()
        self.httpd7.shutdown()
        self.httpd8.shutdown()
        self.httpd9.shutdown()
        print time.asctime(), "Server Stops"

此外,这是我启动和关闭 http 服务器的代码。

这看起来很糟糕,如果我也能把它变成一个 for 循环就好了。

谢谢。

将服务器放入列表中:

servers = [HTTPServer((HOST_NAME, port_number), MyHandler)
           for port_number in PORT_NUMBER]

要在各自的线程中启动服务器:

from threading import Thread

for httpd in servers:
    Thread(target=httpd.serve_forever).start()

优雅地停止所有服务器:

import logging

for httpd in servers:
    try:
        httpd.shutdown()
    except Exception:
        logging.exception("Can't shutdown %r" % (httpd,)) # log exception here