class_docstr: Get data from file cache directly.
code: def _get_next_data(self, filename, file_names_to_prefetch, retry=1):
      if retry > 10:
          logger.log(99, "_get_next_data() retry count over give up.")
          raise
      if self._cache_type == ".npy":
          next_data = (
              self._cache_reader_with_prefetch.open_and_prefetch_cache(
                  filename, file_names_to_prefetch
              )
          )
      else:
          # h5 format
          next_data = {}
          with self._filereader.open_cache(filename) as cache:
              for k, v in cache.items():
                  next_data[k] = v[()]
  
      if current_communicator():
          if set(self._variables) != set(next_data.keys()):
              logger.log(
                  99,
                  "_get_next_data() fails at worker {} retrying count {}/10.".format(
                      current_communicator().rank, retry
                  ),
              )
              sleep(0.01)
              return self._get_next_data(
                  filename, file_names_to_prefetch, retry + 1
              )
      return next_data
  
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 1 for calling the CacheDataSource obj's underlying member method code with example usage: obj._get_next_data(filename, file_names_to_prefetch, retry) and returns: next_data, self