2016-08-25 4 views
0

В настоящее время я работаю с Python BaseHTTPServer, и мне нужно переопределить метод handle_timeout() сервера.Python - BaseHTTPServer - переопределить метод handle_timeout

Согласно документации Python (https://docs.python.org/2/library/basehttpserver.html), BaseHTTPServer является подклассом TCPServer. TCPServer реализует метод 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',) 

Проблема в том, что это не послание, которое я хотите распечатать. Любая помощь с моей проблемой?

ответ

0

Для тех, кто заинтересован, после попытки кое-что я, наконец, пришел к выводу:

Согласно этому файлу (https://svn.python.org/projects/python/trunk/Lib/BaseHTTPServer.py), я сразу скопировал код из BaseHTTPRequestHandler «s handle_one_request -метода и переопределить последний несколько строк, чтобы, наконец, заставить мой код работать.

Все мои другие попытки (переопределить его в классе сервера, перехватывать исключения в обработчике запросов или в методе main), похоже, не сработали.

Надеюсь, это может помочь кому-то иногда.

Смежные вопросы