class_docstr: Responsible for launching a python executor.
  
  The executor will be launched in the same process of the rest of the
  component, i.e. its driver and publisher.
class_docstr_tok: ["Responsible","for","launching","a","python","executor",".","The","executor","will","be","launched","in","the","same","process","of","the","rest","of","the","component",",","i.e",".","its","driver","and","publisher","."]
docstr: Execute underlying component implementation.
docstr_tok: ["Execute","underlying","component","implementation","."]
code: def _run_executor(
      self,
      execution_id: int,
      input_dict: Dict[str, List[types.Artifact]],
      output_dict: Dict[str, List[types.Artifact]],
      exec_properties: Dict[str, Any],
  ) -> None:
      """Execute underlying component implementation."""
      executor_class_spec = cast(
          executor_spec.ExecutorClassSpec, self._component_executor_spec
      )
  
      if issubclass(
          executor_class_spec.executor_class,
          base_beam_executor.BaseBeamExecutor,
      ):
          executor_context = (
              base_beam_executor.BaseBeamExecutor.Context(
                  beam_pipeline_args=self._beam_pipeline_args,
                  tmp_dir=os.path.join(
                      self._pipeline_info.pipeline_root, ".temp", ""
                  ),
                  unique_id=str(execution_id),
              )
          )
      else:
          executor_context = base_executor.BaseExecutor.Context(
              extra_flags=self._beam_pipeline_args,
              tmp_dir=os.path.join(
                  self._pipeline_info.pipeline_root, ".temp", ""
              ),
              unique_id=str(execution_id),
          )
  
      # Type hint of component will cause not-instantiable error as
      # component.executor is Type[BaseExecutor] which has an abstract function.
      executor = executor_class_spec.executor_class(
          executor_context
      )  # type: ignore
  
      # Make a deep copy for input_dict and exec_properties, because they should
      # be immutable in this context.
      # output_dict can still be changed, specifically properties.
      executor.Do(
          copy.deepcopy(input_dict),
          output_dict,
          copy.deepcopy(exec_properties),
      )
  
file_path: tfx/tfx/orchestration/launcher/in_process_component_launcher.py
imports: import copy
  import os
  from typing import Any, Dict, List, cast
  from tfx import types
  from tfx.dsl.components.base import base_beam_executor
  from tfx.dsl.components.base import base_executor
  from tfx.dsl.components.base import executor_spec
  from tfx.orchestration.config import base_component_config
  from tfx.orchestration.launcher import base_component_launcher
label_desc: Use image node_id 2 for calling the InProcessComponentLauncher obj's underlying member method code with example usage: obj._run_executor(execution_id, input_dict, output_dict, exec_properties) without return types