我的应用存在后,我试图对HTTP服务器进行正常关机。下面的实现只是告诉我,我按下Ctrl + C并永远等待服务器死机。这永远不会发生。我认为这里的问题是serves_forever
。
from http_server.server import Server
import os
import signal
import sys
server = None
def signal_handler(sig, frame):
print('You pressed Ctrl+C!')
server.stop()
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
if __name__ == '__main__':
server = Server()
server.start()
http_handler / server.py
import os
import http.server
import socketserver
PORT=8004
class Server():
httpd = None
def start(self):
web_dir = os.path.join(os.path.dirname(__file__), '../static')
os.chdir(web_dir)
Handler = http.server.SimpleHTTPRequestHandler
self.httpd = socketserver.TCPServer(("", PORT), Handler)
print("serving at port", PORT)
self.httpd.serve_forever()
def stop(self):
self.httpd.shutdown()
如何使我的脚本正常关闭服务器并释放端口?我对依靠python自身清理不满意,因为该端口在应用程序关闭后仍然占用了一段时间。我希望我的应用花一些时间退出明确释放所有已用资源的方法。