code: def _update_servers(self):
          
          for address, sd in self._description.server_descriptions().items():
              if address not in self._servers:
                  monitor = self._settings.monitor_class(
                      server_description=sd,
                      topology=self,
                      pool=self._create_pool_for_monitor(address),
                      topology_settings=self._settings)
  
                  weak = None
                  if self._publish_server:
                      weak = weakref.ref(self._events)
                  server = Server(
                      server_description=sd,
                      pool=self._create_pool_for_server(address),
                      monitor=monitor,
                      topology_id=self._topology_id,
                      listeners=self._listeners,
                      events=weak)
  
                  self._servers[address] = server
                  server.open()
              else:
                  self._servers[address].description = sd
  
          for address, server in list(self._servers.items()):
              if not self._description.has_server(address):
                  server.close()
                  self._servers.pop(address)
docs: Sync our Servers from TopologyDescription.server_descriptions.
  
          Hold the lock while calling this.