code: def select_servers(self,
                         selector,
                         server_selection_timeout=None,
                         address=None):
          
          if server_selection_timeout is None:
              server_timeout = self._settings.server_selection_timeout
          else:
              server_timeout = server_selection_timeout
  
          with self._lock:
              server_descriptions = self._select_servers_loop(
                  selector, server_timeout, address)
  
              return [self.get_server_by_address(sd.address)
                      for sd in server_descriptions]
docs: Return a list of Servers matching selector, or time out.
  
          :Parameters:
            - `selector`: function that takes a list of Servers and returns
              a subset of them.
            - `server_selection_timeout` (optional): maximum seconds to wait.
              If not provided, the default value common.SERVER_SELECTION_TIMEOUT
              is used.
            - `address`: optional server address to select.
  
          Calls self.open() if needed.
  
          Raises exc:`ServerSelectionTimeoutError` after
          `server_selection_timeout` if no matching servers are found.