(self,
                       selector,
                       server_selection_timeout=None,
                       address=None)
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.
Return a list of Servers matching selector, or time out.
Return a list of Servers matching selector or time out .
def select_servers(self,
                       selector,
                       server_selection_timeout=None,
                       address=None):
        """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.
        """
        if server_selection_timeout is None:
            server_timeout = self._settings.server_selection_timeout
        else:
            server_timeout = server_selection_timeout

        with self._lock:
            self._description.check_compatible()

            now = _time()
            end_time = now + server_timeout
            server_descriptions = self._description.apply_selector(
                selector, address)

            while not server_descriptions:
                # No suitable servers.
                if server_timeout == 0 or now > end_time:
                    raise ServerSelectionTimeoutError(
                        self._error_message(selector))

                self._ensure_opened()
                self._request_check_all()

                # Release the lock and wait for the topology description to
                # change, or for a timeout. We won't miss any changes that
                # came after our most recent apply_selector call, since we've
                # held the lock until now.
                self._condition.wait(common.MIN_HEARTBEAT_INTERVAL)
                self._description.check_compatible()
                now = _time()
                server_descriptions = self._description.apply_selector(
                    selector, address)

            return [self.get_server_by_address(sd.address)
                    for sd in server_descriptions]
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 : self . _description . check_compatible ( ) now = _time ( ) end_time = now + server_timeout server_descriptions = self . _description . apply_selector ( selector , address ) while not server_descriptions : # No suitable servers. if server_timeout == 0 or now > end_time : raise ServerSelectionTimeoutError ( self . _error_message ( selector ) ) self . _ensure_opened ( ) self . _request_check_all ( ) # Release the lock and wait for the topology description to # change, or for a timeout. We won't miss any changes that # came after our most recent apply_selector call, since we've # held the lock until now. self . _condition . wait ( common . MIN_HEARTBEAT_INTERVAL ) self . _description . check_compatible ( ) now = _time ( ) server_descriptions = self . _description . apply_selector ( selector , address ) return [ self . get_server_by_address ( sd . address ) for sd in server_descriptions ]