docs: def get_client(self, initial_timeout=0.05, next_timeout=200):
          """
          Wait until a client instance is available
          :param float initial_timeout:
            how long to wait initially for an existing client to complete
          :param float next_timeout:
            if the pool could not obtain a client during the initial timeout,
            and we have allocated the maximum available number of clients, wait
            this long until we can retrieve another one
  
          :return: A connection object
          """
          try:
              return self._q.get(True, initial_timeout)
          except Empty:
              try:
                  self._lock.acquire()
                  if self._cur_clients == self._max_clients:
                      raise ClientUnavailableError("Too many clients in use")
                  cb = self._make_client()
                  self._cur_clients += 1
                  cb.start_using()
                  return cb
              except ClientUnavailableError as ex:
                  try:
                      return self._q.get(True, next_timeout)
                  except Empty:
                      raise ex
              finally:
                  self._lock.release()