code: def run_job(
      self,
      job: JobExecutorInterface,
  ):
      job_info = SubmittedJobInfo(job=job)
      try:
          # Touching of output files will be done by handle_job_success
          time.sleep(0.1)
          self.report_job_submission(job_info)
          self.report_job_success(job_info)
      except OSError as ex:
          print_exception(ex, self.workflow.linemaps)
          self.report_job_error(job_info)
  
file_path: snakemake/snakemake/executors/touch.py
imports: import time
  from snakemake_interface_executor_plugins.executors.real import RealExecutor
  from snakemake_interface_executor_plugins.dag import DAGExecutorInterface
  from snakemake_interface_executor_plugins.workflow import WorkflowExecutorInterface
  from snakemake_interface_executor_plugins.logging import LoggerExecutorInterface
  from snakemake_interface_executor_plugins.jobs import JobExecutorInterface
  from snakemake_interface_executor_plugins.executors.base import SubmittedJobInfo
  from snakemake_interface_executor_plugins.settings import CommonSettings
  from snakemake.exceptions import print_exception
label_desc: Use image node_id 1 for calling the Executor obj's underlying member method code with example usage: obj.run_job(job) without return types