Python 3.3 Web服务器重新启动问题
我用python制作了一个简单的Web服务器,以前遇到过一些问题,如下所述: 在这个问题中,答案是使用Python 3.3 Web服务器重新启动问题,python,sockets,http,webserver,Python,Sockets,Http,Webserver,我用python制作了一个简单的Web服务器,以前遇到过一些问题,如下所述: 在这个问题中,答案是使用While True:循环,这样任何崩溃或错误都会立即得到解决,因为它会重新启动 我已经使用了一段时间,仍然希望服务器每隔几分钟重启一次,但是在Linux上,由于某些原因,它对我不起作用。在windows上,下面的代码运行良好,但在linux上,它一直在说 Handler class up here ... ... class Server: def __init__(self):
While True:
循环,这样任何崩溃或错误都会立即得到解决,因为它会重新启动
我已经使用了一段时间,仍然希望服务器每隔几分钟重启一次,但是在Linux上,由于某些原因,它对我不起作用。在windows上,下面的代码运行良好,但在linux上,它一直在说
Handler class up here
...
...
class Server:
def __init__(self):
self.server_class = HTTPServer
self.server_adress = ('MY IP GOES HERE, or localhost', 8080)
global httpd
httpd = self.server_class(self.server_adress, Handler)
self.main()
def main(self):
if count > 1:
global SERVER_UP_SINCE
HOUR_CHECK = int(((count - 1) * RESTART_INTERVAL) / 60)
SERVER_UPTIME = str(HOUR_CHECK) + " MINUTES"
if HOUR_CHECK > 60:
minutes = int(HOUR_CHECK % 60)
hours = int(HOUR_CHECK // 60)
SERVER_UPTIME = ("%s HOURS, %s MINUTES" % (str(hours), str(minutes)))
SERVING_ON_ADDR = self.server_adress
SERVER_UP_SINCE = str(SERVER_UP_SINCE)
SERVER_RESTART_NUMBER = count - 1
print("""
SERVER INFO
-------------------------------------
SERVER_UPTIME: %s
SERVER_UP_SINCE: %s
TOTAL_FILES_SERVED: %d
SERVING_ON_ADDR: %s
SERVER_RESTART_NUMBER: %s
\n\nSERVER HAS RESTARTED
""" % (SERVER_UPTIME, SERVER_UP_SINCE, TOTAL_FILES, SERVING_ON_ADDR, SERVER_RESTART_NUMBER))
else:
print("SERVER_BOOT=1\nSERVER_ONLINE=TRUE\nRESTART_LOOP=TRUE\nSERVING_ON_ADDR:%s" % str(self.server_adress))
while True:
try:
httpd.serve_forever()
except KeyboardInterrupt:
print("Shutting down...")
break
httpd.shutdown()
httpd.socket.close()
raise(SystemExit)
return
def server_restart():
"""If you want the restart timer to be longer, replace the number after the RESTART_INTERVAL variable"""
global RESTART_INTERVAL
RESTART_INTERVAL = 10
threading.Timer(RESTART_INTERVAL, server_restart).start()
global count
count = count + 1
instance = Server()
if __name__ == "__main__":
global SERVER_UP_SINCE
SERVER_UP_SINCE = strftime("%d-%m-%Y %H:%M:%S", gmtime())
server_restart()
基本上,我制作了一个线程,每10秒重启一次(用于测试),然后启动服务器。十秒钟后它会说
File "/home/username/Desktop/Webserver/server.py", line 199, in __init__
httpd = self.server_class(self.server_adress, Handler)
File "/usr/lib/python3.3/socketserver.py", line 430, in __init__
self.server_bind()
File "/usr/lib/python3.3/http/server.py", line 135, in server_bind
socketserver.TCPServer.server_bind(self)
File "/usr/lib/python3.3/socketserver.py", line 441, in server_bind
self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use
正如您在
中看到的,除了键盘中断
行,我尝试了一切方法使服务器停止,程序停止,但它不会停止。但我真正想知道的是,如何使这台服务器能够重新启动,而不会出现一些不可靠的错误。不知道这里发生了什么。你是让线程打开服务器,还是反过来?@BobBlogge我正在使用线程让服务器每隔x
秒重新启动一次。当你试图关闭套接字时,它可能处于阻塞“接受”状态。也许让它成为非阻塞的,并检查队列中是否存在任何连接可以释放它,而不存在错误。