Python basic threaded server

Reviewed By: ccheever-pillar


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664812 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/py/src/server/TServer.py b/lib/py/src/server/TServer.py
index c9a701e..53260b8 100644
--- a/lib/py/src/server/TServer.py
+++ b/lib/py/src/server/TServer.py
@@ -34,9 +34,37 @@
       try:
         while True:
           self.processor.process(input, output)
+      except TTransport.TTransportException, tx:
+        pass
       except Exception, x:
         print '%s, %s, %s' % (type(x), x, traceback.format_exc())
-        print 'Client died.'
 
       input.close()
       output.close()
+
+class TThreadedServer(TServer):
+
+  """Threaded server that spawns a new thread per each connection."""
+
+  def __init__(self, processor, serverTransport, transportFactory=None):
+    TServer.__init__(self, processor, serverTransport, transportFactory)
+
+  def serve(self):
+    self.serverTransport.listen()
+    while True:
+      try:
+        client = self.serverTransport.accept()
+        t = threading.Thread(target = self.handle, args=(client,))
+        t.start()
+      except Exception, x:
+        print '%s, %s, %s,' % (type(x), x, traceback.format_exc())
+
+  def handle(self, client):
+    (input, output) = self.transportFactory.getIOTransports(client)
+    try:
+      while True:
+        self.processor.process(input, output)
+    except TTransport.TTransportException, tx:
+      pass
+    except Exception, x:
+      print '%s, %s, %s' % (type(x), x, traceback.format_exc())