code: def _dump_features(self):
      logger.info("start dump features......")
      _dump_func = partial(
          self._dump_bin, calendar_list=self._calendars_list
      )
      with tqdm(total=len(self.csv_files)) as p_bar:
          with ProcessPoolExecutor(max_workers=self.works) as executor:
              for _ in executor.map(_dump_func, self.csv_files):
                  p_bar.update()
  
      logger.info("end of features dump.\n")
  
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 4 for calling the DumpDataAll obj's underlying member method code with example usage: obj._dump_features() without return types