浏览代码

ThreadingMixIn for Python server (#102)

Lutz Roeder 7 年之前
父节点
当前提交
9ad8d0ea9b
共有 2 个文件被更改,包括 12 次插入10 次删除
  1. 1 1
      src/netron
  2. 11 9
      src/netron.py

+ 1 - 1
src/netron

@@ -9,9 +9,9 @@ if __name__ == '__main__':
     parser = argparse.ArgumentParser(description='Viewer for neural network models.')
     parser.add_argument('file', metavar='MODEL_FILE', help='model file to serve', nargs='?', default=None)
     parser.add_argument('-v', '--verbose', help='log details to console', action='store_true')
+    parser.add_argument('-b', '--browse', help='launch web browser', action='store_true')
     parser.add_argument('--port', help='port to serve (default: 8080)', type=int, default=8080)
     parser.add_argument('--host', help='host to serve (default: localhost)', default='localhost')
-    parser.add_argument('--browse', help='launch web browser', action='store_true')
     args = parser.parse_args()
     if args.file and not os.path.exists(args.file):
         print("Model file '" + args.file + "' does not exist.")

+ 11 - 9
src/netron.py

@@ -11,12 +11,14 @@ if sys.version_info[0] > 2:
     from urllib.parse import urlparse
     from http.server import HTTPServer
     from http.server import BaseHTTPRequestHandler
+    from socketserver import ThreadingMixIn
 else:
     from urlparse import urlparse
     from BaseHTTPServer import HTTPServer
     from BaseHTTPServer import BaseHTTPRequestHandler
+    from SocketServer import ThreadingMixIn
 
-class MyHTTPRequestHandler(BaseHTTPRequestHandler):
+class HTTPRequestHandler(BaseHTTPRequestHandler):
     def handler(self):
         if not hasattr(self, 'mime_types_map'):
             self.mime_types_map = {
@@ -90,25 +92,25 @@ class MyHTTPRequestHandler(BaseHTTPRequestHandler):
     def log_message(self, format, *args):
         return
 
-class MyHTTPServer(HTTPServer):
-    def initialize_data(self, data, file, verbose):
-        self.RequestHandlerClass.file = file
-        self.RequestHandlerClass.data = data
-        self.RequestHandlerClass.verbose = verbose
+class ThreadedHTTPServer(ThreadingMixIn, HTTPServer): pass
 
 def serve_data(data, file, verbose=False, browse=False, port=8080, host='localhost'):
-    server = MyHTTPServer((host, port), MyHTTPRequestHandler)
+    server = ThreadedHTTPServer((host, port), HTTPRequestHandler)
+    server.RequestHandlerClass.file = file
+    server.RequestHandlerClass.data = data
+    server.RequestHandlerClass.verbose = verbose
     url = 'http://' + host + ':' + str(port)
     if file:
         print("Serving '" + file + "' at " + url)
     else:
         print("Serving at " + url)
-    server.initialize_data(data, file, verbose)
     sys.stdout.flush()
     if browse:
         threading.Timer(1, webbrowser.open, args=(url,)).start()
     try:
-        server.serve_forever()
+        while True:
+            sys.stdout.flush()
+            server.handle_request()
     except (KeyboardInterrupt, SystemExit):
         print("\nStopping")
         server.server_close()