docs: def _worker(self, constructor, conn):
      """The process waits for actions and sends back environment results.
  
      Args:
        constructor: Constructor for the OpenAI Gym environment.
        conn: Connection for communication to the main process.
  
      Raises:
        KeyError: When receiving a message of unknown type.
      """
      try:
        env = constructor()
        while True:
          try:
            # Only block for short times to have keyboard exceptions be raised.
            if not conn.poll(0.1):
              continue
            message, payload = conn.recv()
          except (EOFError, KeyboardInterrupt):
            break
          if message == self._ACCESS:
            name = payload
            result = getattr(env, name)
            conn.send((self._RESULT, result))
            continue
          if message == self._CALL:
            name, args, kwargs = payload
            result = getattr(env, name)(*args, **kwargs)
            conn.send((self._RESULT, result))
            continue
          if message == self._CLOSE:
            assert payload is None
            break
          raise KeyError('Received message of unknown type {}'.format(message))
      except Exception:  # pylint: disable=broad-except
        stacktrace = ''.join(traceback.format_exception(*sys.exc_info()))
        tf.logging.error('Error in environment process: {}'.format(stacktrace))
        conn.send((self._EXCEPTION, stacktrace))
      conn.close()