docs: def _get_modules(self):
          """
          Get modules under the self.config['global']['module_dirs'] directories.
          Plugin modules has the two classes of "ConcreteJob" and "Validator".
          Further, "Validator.module" property is used to
          deciding which one to use plugin module.
  
          This method returns a dictionary as following:
          modules = {
              'redis': <module 'MODULE_NAME' from 'REAL_FILE_NAME'>,
              'memcached': <module 'MODULE_NAME' from 'REAL_FILE_NAME'>
              ...
          }
  
          At here,
          collect all plugin modules under the self._module_dirs directories.
          Plugins that were collected by this method is used
          in ConfigReader._register_jobs() and ConfigReader._get_raw_specs().
          """
  
          not_import = set()
          not_import.add('base')
          modules = {}
  
          for path in self.config['global']['module_dir']:
              sys.path.insert(0, path)
              iter_modules = pkgutil.iter_modules([path])
  
              for module_info in iter_modules:
                  module_name = module_info[1]
  
                  if module_name in not_import:
                      continue
  
                  if helpers.helper_import(module_name, 'Validator'):
                      module = helpers.helper_import(module_name)
                      modules[module.__name__] = module
  
              sys.path.remove(path)
  
          return modules