code: def change_dataloader(self):
      choice = 0
  
      if self.num_datasets <= 1:
          self.current_index = choice
          return
  
      if self._is_main:
          choice = self.iteration_strategy()
  
          # self._finished_iterators will always be empty in case of
          # non-proportional (equal) sampling
          while self.dataset_list[choice] in self._finished_iterators:
              choice = self.iteration_strategy()
  
      choice = broadcast_scalar(choice, 0, device=get_current_device())
      self.current_index = choice
  
imports: import logging
  import warnings
  from typing import Dict, Iterator
  import torch
  from mmf.common.sample import convert_batch_to_sample_list, SampleList
  from mmf.datasets import iteration_strategies
  from mmf.utils.build import build_dataloader_and_sampler, build_dataset
  from mmf.utils.dataset import dataset_list_from_config
  from mmf.utils.distributed import broadcast_scalar, get_world_size, is_dist_initialized, is_main, is_xla
  from mmf.utils.general import get_batch_size, get_current_device
  from omegaconf import OmegaConf
  from torch.utils.data.dataloader import DataLoader, Sampler
label_desc: Use image node_id 20 for calling the MultiDataLoader obj's underlying member method code with example usage: obj.change_dataloader() without return types