class_docstr: ConcatDataSource
  
  Wrapper DataSource for Multiple DataSources.
code: def _get_data(self, position):
      idx = self._indexes[position]
      for i, data_bound in enumerate(self._sw_points):
          if idx < data_bound:
              _idx = idx - self._sw_points[i - 1] if i > 0 else idx
              return self._data_sources[i]._get_data(_idx)
      return None
  
imports: import atexit
  import csv
  import os
  import threading
  from collections import OrderedDict, deque
  from time import sleep
  import numpy
  from nnabla.config import nnabla_config
  from nnabla.logger import logger
  from nnabla.utils.communicator_util import current_communicator
  from six.moves import queue
  from .data_source import DataSource
  from .data_source_loader import FileReader, load
label_desc: Use image node_id 2 for calling the ConcatDataSource obj's underlying member method code with example usage: obj._get_data(position) and returns: None, self