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","."]
docstr: Implementation of Launcher.setup, called before the launch
  
  :param config: The master config
  :param config_loader: The config loader, used to derive the job configurations from the sweep run.
  :param task_function: The job entry point as function object. This is not used at all, as it is much simpler
      to call the same command from bash than to serialize the function object, transfer it to the pod and
      calling the deserialized method there.
docstr_tok: ["Implementation","of","Launcher.setup",",","called","before","the","launch",":","param","config",":","The","master","config",":","param","config_loader",":","The","config","loader",",","used","to","derive","the","job","configurations","from","the","sweep","run",".",":","param","task_function",":","The","job","entry","point","as","function","object",".","This","is","not","used","at","all",",","as","it","is","much","simpler","to","call","the","same","command","from","bash","than","to","serialize","the","function","object",",","transfer","it","to","the","pod","and","calling","the","deserialized","method","there","."]
code: def setup(
      self,
      config: DictConfig,
      config_loader: ConfigLoader,
      task_function: TaskFunction,
  ) -> None:
      """Implementation of Launcher.setup, called before the launch
  
      :param config: The master config
      :param config_loader: The config loader, used to derive the job configurations from the sweep run.
      :param task_function: The job entry point as function object. This is not used at all, as it is much simpler
          to call the same command from bash than to serialize the function object, transfer it to the pod and
          calling the deserialized method there.
      """
      self.config = config
      self.config_loader = config_loader
      self.task_function = task_function
  
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 2 for calling the MazeLocalLauncher obj's underlying member method code with example usage: obj.setup(config, config_loader, task_function) without return types