Python - BaseHTTPServer - 覆盖 "handle_timeout" 方法
Python - BaseHTTPServer - Overriding "handle_timeout" method
我目前正在使用 Python 的 BaseHTTPServer
,我需要覆盖服务器的 handle_timeout()
方法。
根据 Python 的文档 (https://docs.python.org/2/library/basehttpserver.html), BaseHTTPServer is a subclass of TCPServer. TCPServer implements the method handle_timeout
(https://docs.python.org/2/library/socketserver.html#SocketServer.BaseServer.handle_timeout),我想覆盖它。
我的代码目前看起来像这样:
class newServer(BaseHTTPServer.HTTPServer):
def handle_timeout(self):
print "Timeout!"
class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def setup(self):
self.timeout=2
BaseHTTPServer.BaseHTTPRequestHandler.setup(self)
if __name__ == '__main__':
server=newServer
httpd = server((HOST_NAME, PORT_NUMBER), RequestHandler)
print time.asctime(), "Server Starts - %s:%s" % (HOST_NAME, PORT_NUMBER)
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
print time.asctime(), "Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)
超时本身有效,我从服务器收到以下消息:
Request timed out: timeout('timed out',)
问题是,这不是我要打印的消息。
对我的问题有帮助吗?
对于任何感兴趣的人,在尝试了一些事情之后我终于得出了一个结论:
根据此文件 (https://svn.python.org/projects/python/trunk/Lib/BaseHTTPServer.py),我直接从 BaseHTTPRequestHandler
的 handle_one_request
方法中复制了代码,并覆盖了最后几行,最终使我的代码能够工作.
我的所有其他尝试(在服务器 class 中覆盖它,在请求处理程序或 main
方法中捕获异常)似乎都没有用。
希望这有时能帮到一些人。
我目前正在使用 Python 的 BaseHTTPServer
,我需要覆盖服务器的 handle_timeout()
方法。
根据 Python 的文档 (https://docs.python.org/2/library/basehttpserver.html), BaseHTTPServer is a subclass of TCPServer. TCPServer implements the method handle_timeout
(https://docs.python.org/2/library/socketserver.html#SocketServer.BaseServer.handle_timeout),我想覆盖它。
我的代码目前看起来像这样:
class newServer(BaseHTTPServer.HTTPServer):
def handle_timeout(self):
print "Timeout!"
class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def setup(self):
self.timeout=2
BaseHTTPServer.BaseHTTPRequestHandler.setup(self)
if __name__ == '__main__':
server=newServer
httpd = server((HOST_NAME, PORT_NUMBER), RequestHandler)
print time.asctime(), "Server Starts - %s:%s" % (HOST_NAME, PORT_NUMBER)
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
print time.asctime(), "Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)
超时本身有效,我从服务器收到以下消息:
Request timed out: timeout('timed out',)
问题是,这不是我要打印的消息。 对我的问题有帮助吗?
对于任何感兴趣的人,在尝试了一些事情之后我终于得出了一个结论:
根据此文件 (https://svn.python.org/projects/python/trunk/Lib/BaseHTTPServer.py),我直接从 BaseHTTPRequestHandler
的 handle_one_request
方法中复制了代码,并覆盖了最后几行,最终使我的代码能够工作.
我的所有其他尝试(在服务器 class 中覆盖它,在请求处理程序或 main
方法中捕获异常)似乎都没有用。
希望这有时能帮到一些人。