class_docstr: Server with a fixed size pool of worker subprocesses to service requests
  
  Note that if you need shared state between the handlers - it's up to you!
  Written by Dvir Volk, doat.com
docstr: Start workers and put into queue
docstr_tok: ["Start","workers","and","put","into","queue"]
code: def serve(self):
      """Start workers and put into queue"""
      # this is a shared state that can tell the workers to exit when False
      self.isRunning.value = True
  
      # first bind and listen to the port
      self.serverTransport.listen()
  
      # fork the children
      for i in range(self.numWorkers):
          try:
              w = Process(target=self.workerProcess)
              w.daemon = True
              w.start()
              self.workers.append(w)
          except Exception as x:
              logger.exception(x)
  
      # wait until the condition is set by stop()
      while True:
          self.stopCondition.acquire()
          try:
              self.stopCondition.wait()
              break
          except (SystemExit, KeyboardInterrupt):
              break
          except Exception as x:
              logger.exception(x)
  
      self.isRunning.value = False
  
file_path: infinity/third_party/thrift/lib/py/src/server/TProcessPoolServer.py
imports: import logging
  from multiprocessing import Process, Value, Condition
  from .TServer import TServer
  from thrift.transport.TTransport import TTransportException
label_desc: Use image node_id 7 for calling the TProcessPoolServer obj's underlying member method code with example usage: obj.serve() without return types