code: def _load_all_source_data(self):
      # NOTE: Need more memory
      logger.info("start load all source data....")
      all_df = []
  
      def _read_csv(file_path: Path):
          _df = pd.read_csv(
              file_path, parse_dates=[self.date_field_name]
          )
          if self.symbol_field_name not in _df.columns:
              _df[self.symbol_field_name] = self.get_symbol_from_file(
                  file_path
              )
          return _df
  
      with tqdm(total=len(self.csv_files)) as p_bar:
          with ThreadPoolExecutor(max_workers=self.works) as executor:
              for df in executor.map(_read_csv, self.csv_files):
                  if not df.empty:
                      all_df.append(df)
                  p_bar.update()
  
      logger.info("end of load all data.\n")
      return pd.concat(all_df, sort=False)
  
imports: import abc
  import shutil
  import traceback
  from pathlib import Path
  from typing import Iterable, List, Union
  from functools import partial
  from concurrent.futures import ThreadPoolExecutor, as_completed, ProcessPoolExecutor
  import fire
  import numpy
  import pandas
  from tqdm import tqdm
  from loguru import logger
  from qlib.utils import fname_to_code, code_to_fname
label_desc: Use image node_id 2 for calling the DumpDataUpdate obj's underlying member method code with example usage: obj._load_all_source_data() and returns: pd, _df