class_docstr: Custom Hydra launcher distributing the jobs in separate processes on the local machine.
  
  The implementation is based on
  https://github.com/facebookresearch/hydra/blob/master/examples/plugins/example_launcher_plugin/hydra_plugins/example_launcher_plugin/example_launcher.py.
  
  :param n_jobs: Maximum number of parallel jobs. If -1, all CPUs are used.
class_docstr_tok: ["Custom","Hydra","launcher","distributing","the","jobs","in","separate","processes","on","the","local","machine",".","The","implementation","is","based","on","https",":","\/\/github.com\/facebookresearch\/hydra\/blob\/master\/examples\/plugins\/example_launcher_plugin\/hydra_plugins\/example_launcher_plugin\/example_launcher.py",".",":","param","n_jobs",":","Maximum","number","of","parallel","jobs",".","If","-1",",","all","CPUs","are","used","."]
code: def __init__(self, n_jobs: int):
      self.config: Optional[DictConfig] = None
      self.config_loader: Optional[ConfigLoader] = None
      self.task_function: Optional[TaskFunction] = None
  
      # determine number of parallel jobs
      self._n_jobs = (
          multiprocessing.cpu_count() if n_jobs == -1 else n_jobs
      )
  
file_path: maze/hydra_plugins/maze_local_launcher.py
imports: import logging
  import multiprocessing
  from dataclasses import dataclass
  from pathlib import Path
  from typing import Sequence, Optional
  from hydra import TaskFunction
  from hydra.core.config_loader import ConfigLoader
  from hydra.core.config_store import ConfigStore
  from hydra.core.utils import JobReturn, configure_log, filter_overrides, setup_globals, run_job
  from hydra.plugins.launcher import Launcher
  from omegaconf import DictConfig, open_dict
  from maze.utils.process import Process
label_desc: Use image node_id 1 to create a new MazeLocalLauncher object from inherited base classes: Launcher with example: obj = MazeLocalLauncher(n_jobs)