在多个端口上处理打开 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
我需要在 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