class_docstr: Get data from file cache directly.
code: def reset(self):
      with self._thread_lock:
          super(CacheDataSource, self).reset()
  
          self._order = []
  
          if self._shuffle:
              for i in list(
                  self._rng.permutation(
                      list(range(len(self._cache_files)))
                  )
              ):
                  filename, length = self._cache_files[i]
                  for j in list(
                      self._rng.permutation(list(range(length)))
                  ):
                      self._order.append((filename, j))
          else:
              for i in range(len(self._cache_files)):
                  filename, length = self._cache_files[i]
                  for j in range(length):
                      self._order.append((filename, j))
  
          self._current_data = {}
          self._current_filename = None
  
          self._size = len(self._order)
          self._generation += 1
  
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 8 for calling the CacheDataSource obj's underlying member method code with example usage: obj.reset() without return types